web-dev-qa-db-fra.com

Comment 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 menant à des informations sur l'application, un bouton de navigation permettant à l'utilisateur de voir tous les morceaux de texte individuels pouvant être affichés). Le bouton principal mène à un autre écran où le texte est affiché. En balayant à gauche et à droite, il peut voir différents passages de texte. Ceci est l'objectif principal de l'application.

Actuellement, j'ai un ActionBar mis en œuvre. Mon MainActivity.Java étend AppCompatActivity. Tout dans l'application est dans cette activité.

Maintenant, je veux faire en sorte que la barre Action n'apparaisse qu'en mode "Affichage", et non en écran de démarrage, ou en mode "info"/"parcourir".

Est-il possible d'avoir un ActionBar dans une partie de l'application et non ActionBar dans une autre partie de l'application? (Et tout garder dans la même activité?)

J'ai essayé d'accomplir cela sans résultat. Si cela est possible, que dois-je essayer ensuite?

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

1) Créer ce thème

<style name="Theme.AppCompat.NoActionBar" parent="Theme.AppCompat.Light">
    <item name="Android:windowActionBar">false</item>  
    <item name="Android:windowNoTitle">true</item>
</style>  

Et appliquez-le à MainActivity ...

<activity
        Android:name=".MainActivity"
        Android:label="@string/app_name"
        Android:theme="@style/Theme.AppCompat.NoActionBar" > 

.... Après cela, la barre d’action était toujours là. (Ceci provient de ce message S.O. ( Android: windowNoTitle ne cachera pas la barre d’action avec appcompat-v7 21.0. )

2) Une autre tentative a été d'ajouter 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 cette S.O. post: ( Comment masquer la barre d'action avant la création de l'activité, puis l'afficher à nouveau? )

Aucune suggestion?

53
Timothy Steele

Dans les activités où vous voulez avoir aucune 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 la vôtre via setSupportActionBar(Toolbar).

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

When en utilisant la barre d’application appcompat-v7 vous devez l’obtenir en appelant getSupportActionBar() au lieu de getActionBar().

87
Eugen Pechanec

Vous pouvez masquer et afficher le ActionBar 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 Toolbar comme ActionBar.

52
theapache64

Étendez votre activité en tant que AppCompatActivity, puis utilisez la barre d’actions en tant que: -

getSupportActionBar().hide();  // for hiding
getSupportActionBar().show();  // for showing
11
Pankaj
<style name="Theme.AppCompat.NoActionBar" parent="Theme.AppCompat.Light">
    <item name="Android:windowActionBar">false</item>  
    <item name="Android:windowNoTitle">true</item>
</style>

remove Android dans l'élément windowActionbar.just comme suit:

<style name="Theme.AppCompat.NoActionBar" parent="Theme.AppCompat.Light">
    <item name="windowActionBar">false</item>  
    <item name="Android:windowNoTitle">true</item>
</style>

J'espère que cela peut vous aider.

5
paperhs

AppCompatActivity possède sa propre barre d'outils intégrée. Vous n'avez pas besoin d'utiliser une 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);
}
3
Selcuk Soydan

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

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

Si vous voulez définir le titre,

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

Supprimer la barre d’outils pour toutes les activités avec AppTheme:
styles.xml:

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"><!-- .NoActionBar -->
0
Volodymyr Kulyk

Si vous essayez d'afficher ou de masquer la barre d'action d'un INTENT avec AppCompatActivity et que vous rencontrez les problèmes suivants:

  • pointeur null exception ...
  • problème de fil ...

Suivez ces étapes pour accéder au même fil de discussion 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();
        }
    });

}
0
Thomas LeBlond

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

Android:theme="@Android:style/Theme.NoTitleBar.Fullscreen"
0
Rahul Raina