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?
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()
.
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
.
Étendez votre activité en tant que AppCompatActivity
, puis utilisez la barre d’actions en tant que: -
getSupportActionBar().hide(); // for hiding
getSupportActionBar().show(); // for showing
<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.
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);
}
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");
Supprimer la barre d’outils pour toutes les activités avec AppTheme
:
styles.xml:
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"><!-- .NoActionBar -->
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:
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();
}
});
}
J'espère que cela peut être une solution. Cela a fonctionné sur mon système:
Android:theme="@Android:style/Theme.NoTitleBar.Fullscreen"