Comment faire pour afficher et masquer ActionBar avec AppCompat v.7

J’ai une application simple qui affiche du texte.

L’application commence par un écran principal avec quelques options (par exemple, un bouton d’information qui mène à des informations sur l’application, un bouton de navigation permettant à l’utilisateur de voir tous les éléments de texte pouvant être affichés). Le bouton principal mène à un autre écran où le texte est affiché. En faisant glisser à gauche et à droite, il peut voir différents passages de texte. C’est le but principal de l’application.

Actuellement, j’ai un ActionBar implémenté. Mon MainActivity.Java étend AppCompatActivity. Tout dans l’application est dans cette activité.

Maintenant, je veux faire en sorte que l’ActionBar apparaisse uniquement en mode “Affichage”, pas dans l’écran de démarrage, ou dans le mode “info” / “parcourir”.

Est-il possible d’avoir un ActionBar dans une partie de l’application, et aucun ActionBar dans une autre partie de l’application? (Et gardez le tout dans la même activité?)

J’ai essayé d’accomplir cela sans succès. Si cela est possible, que dois-je essayer ensuite?

Jusqu’à présent, j’ai tenté ce qui suit:

1) Créez ce thème

 false true  

Et l’appliquer à MainActivity …

  

…. Après cela, l’ActionBar était toujours là. (Ceci vient de ce post SO ( android: windowNoTitle ne cachera pas la barre d’action avec appcompat-v7 21.0.0 )

2) Une autre tentative consistait à append ceci à onCreate.

 public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); getWindow().requestFeature(Window.FEATURE_ACTION_BAR); getActionBar().hide(); setContentView(R.layout.activity_main); 

Cela est venu d’étudier ce post SO: ( Comment masquer la barre d’action avant la création de l’activité, puis l’afficher à nouveau? )

Aucune suggestion?

Dans les activités où vous ne voulez pas utiliser de barre d’action, utilisez un thème dérivé de Theme.AppCompat.NoActionBar ou Theme.AppCompat.Light.NoActionBar . Cette activité ne pourra jamais afficher la barre d’action à moins que vous ne fournissiez votre propre via setSupportActionBar(Toolbar) .

Dans les activités où vous souhaitez que la barre d’action utilise un thème dérivé de Theme.AppCompat , Theme.AppCompat.Light ou Theme.AppCompat.Light.DarkActionBar . Cela vous permettra de masquer ou d’afficher dynamicment la barre d’action dans une telle activité. Vous ne pourrez pas fournir votre propre barre d’action en utilisant ces thèmes.

Lorsque vous travaillez avec la barre d’action appcompat-v7, vous devez l’obtenir en appelant getSupportActionBar() au lieu de getActionBar() .

Vous pouvez masquer et afficher la barre d’action par programme.

Cacher

 getSupportActionBar().hide(); 

Montrer

 getSupportActionBar().show(); 

Cela peut aussi être fait à partir de fragments

Cacher

 getActivity().getSupportActionBar().hide(); 

Montrer

 getActivity().getSupportActionBar().show(); 

Modifier:

Comme noté par @RenniePet ,

Vous devez appeler ((AppCompatActivity)getActivity()).getSupportActionBar() si vous utilisez la Toolbar d’ Toolbar comme ActionBar .

Développez votre activité en tant AppCompatActivity , puis utilisez la barre d’action comme: –

 getSupportActionBar().hide(); // for hiding getSupportActionBar().show(); // for showing 
  

supprimer android dans l’article windowActionbar.just comme suit:

  

J’espère que cela peut vous aider.

AppCompatActivity a sa propre barre d’outils intégrée. Vous n’avez pas besoin d’utiliser la définition de barre d’outils supplémentaire dans votre fichier XML principal.

il suffit d’appeler getSupportActionBar (). show ()

 protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); getSupportActionBar().show(); } public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu_main, menu); return super.onCreateOptionsMenu(menu); } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); //noinspection SimplifiableIfStatement if (id == R.id.action_settings) { TextView text1=(TextView)findViewById(R.id.textView); text1.setText("I changed the text!"); } return super.onOptionsItemSelected(item); } 

Dans la méthode onCreate, après setContentView, utilisez-la simplement pour afficher ou masquer chaque classe.

 getSupportActionBar().hide(); getSupportActionBar().show(); 

Si vous voulez définir le titre,

 getSupportActionBar().setTitle("This is ToolBar"); 

J’espère que cela peut être une solution. Cela a fonctionné sur mon système:

 android:theme="@android:style/Theme.NoTitleBar.Fullscreen" 

Rejeter ToolBar pour toutes les activités avec AppTheme :
styles.xml :

  

Si vous essayez d’afficher / masquer le ActionBar d’un INTENT avec AppCompatActivity et que vous rencontrez les problèmes suivants:

  • pointeur null exception …
  • problème de thread …

Suivez ces étapes pour accéder au même thread pertinent dans l’intention:

 // 1) Calling the intent in the "main activity" Intent intent = new Intent(context, YourClass.class); startActivity(intent); // 2) Get the context in your "Intent activity" public class YourClass extends AppCompatActivity { YourClass mContext; @Override protected void onCreate(Bundle savedInstanceState) { mContext = this; } // 3) Hide/Show Action bar from a method public void yourMethod(YourClass mContext){ mContext.runOnUiThread(new Runnable() { @Override public void run() { mContext.getSupportActionBar().hide(); } }); }