Je travaille sur l'utilisation de la barre d'outils nouvellement ajoutée introduite dans Lollipop et dans la bibliothèque AppCompat-v7. J'ai suivi ce guide lors de la configuration de la barre d'outils. J'ai remarqué que lorsque vous appelez quelque chose qui affichera le ActionBar contextuel (comme la mise en surbrillance du texte à copier/coller), il enfoncera la barre d'outils page. Vous pouvez voir ce dont je parle dans l'image en bas de la page:
Donc, essentiellement, je l’établis comme ceci. J'ai la barre d'outils définie dans un fichier XML que j'utilise avec les balises include:
<Android.support.v7.widget.Toolbar
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:id="@+id/toolbar"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:background="?attr/colorPrimary"/>
Ensuite, je l'instancie à mon avis:
<LinearLayout
xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:tools="http://schemas.Android.com/tools"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:orientation="vertical"
Android:id="@+id/root"
tools:context=".MainActivity">
<include
layout="@layout/toolbar"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"/>
<!-- Rest of view -->
</LinearLayout>
Dans le code, je l'ai configuré comme suit:
// On Create method of activity:
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
Est-ce que quelqu'un sait comment faire en sorte que la barre d’action contextuelle vienne recouvrir la barre d’outils?
Solution: utilisez la propriété windowActionModeOverlay . Définissez ceci dans votre thème:
<item name="windowActionModeOverlay">true</item>
et le mode d'action sera affiché par-dessus la barre d'action au lieu de l'enfoncer. (Si vous n'utilisez pas la dernière AppCompat, vous devez ajouter le préfixe "Android:" à la propriété). En gros, cela signifie à AppCompat que vous avez une barre d’outils située en haut de l’écran et qu’elle doit dessiner le mode Action au-dessus.
J'ai rencontré le même problème. Quel que soit le thème que j'ai défini, la barre d'outils que j'ai définie sous forme de barre d'outils est toujours enfoncée. J'ai essayé avec et sans la bibliothèque de support, mais peu importait.
Malheureusement, je n’ai pas pu résoudre le problème, j’ai donc créé une solution de contournement. Dans mon ActionModeCallback
'onCreateActionMode
, je cache la barre d'action:
actionBarToolbar.setVisibility(View.GONE);
et dans onDestroyActionMode
Je le montre à nouveau:
actionBarToolbar.setVisibility(View.VISIBLE);
Le masquage/affichage se produit si rapidement que cela ne se remarque pas sur mes appareils de test. Il y a bien sûr un inconvénient: bien que enter-animation fonctionne toujours, l'animation de sortie de la barre d'actions contextuelles est perdue car la barre d'outils apparaît immédiatement au-dessus. Mais jusqu'à ce que nous trouvions une meilleure solution, je suppose que nous sommes coincés avec cela.
(Mon activité consiste en fait à étendre une classe personnalisée BaseActivity
qui utilise une méthode appelée getActionBarToolbar()
, tirée du code source Google I/O 2014 , ce qui me permet de récupérer facilement la barre d'outils:
BaseActivity activity = (BaseActivity) getActivity();
activity.getActionBarToolbar().setVisibility(View.GONE);
Dommage que l'application d'E/S n'utilise pas la barre d'actions contextuelles.)
Ne le démarrez pas sur votre activité, mais sur votre barre d’outils. Dans votre activité:
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
toolbar.startActionMode(mActionModeCallback)
et vous devez utiliser
<item name="windowActionModeOverlay">true</item>
Dans mon cas, <item name="windowActionModeOverlay">true</item>
ne n'a pas fonctionné, mais ce travail: <item name="Android:windowActionModeOverlay">true</item>
, la Android
est la clé.
La solution de Jacob a fonctionné pour moi, mais la barre d’action contextuelle était transparente et la barre d’outils était visible. Cela peut être résolu comme suit:
<style name="AppTheme.Base" parent="Theme.AppCompat.Light">
....
....
<item name="actionModeStyle">@style/CustomActionMode</item>
</style>
<style name="CustomActionMode" parent="@style/Widget.AppCompat.ActionMode">
<item name="background">@color/primary_material_light</item>
</style>
Le thème "AppTheme.Base" doit être celui appliqué à la barre d'outils.
Plus de détails concernant le style contextuel des barres d’action:
Autre petit ajout: assurez-vous de définir au moins un écran vide dans l'activité via setContentView(R.layout.empty_screen)
si vous chargez l'intégralité de l'interface utilisateur en fragments (ft.replace(Android.R.id.content, fragment)
).
Méthode très utile pour amener la barre d'outils au premier plan toolbar.bringToFront()