Barre d'outils Contextuelle et ActionBar avec AppCompat-v7
Je suis en train de travailler sur l'utilisation de la nouvelle Barre d'outils qui a été introduit en Sucette et la AppCompat-v7 bibliothèque. J'ai suivi ce guide sur la configuration de la Barre d'outils, j'ai remarqué que lorsque vous appelez quelque chose qui va amener le contexte ActionBar (tels que la mise en surbrillance de texte pour le copier/coller), qu'il va pousser la Barre d'outils au bas de la page. Vous pouvez voir de quoi je parle dans l'image en bas de la page:
Donc, essentiellement, je l'ai configuré comme ceci. J'ai la Barre d'outils définis dans un fichier xml que j'utilise avec inclure des balises:
<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"/>
Puis, je l'instancier dans mon point de vue:
<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);
Personne ne sait comment faire en sorte que le contexte ActionBar vient overtop de la Barre d'outils?
- Ce thème est votre activité à l'aide?
- Thème.AppCompat.
- David, j'ai juste cliqué sur le lien et il semble fonctionner pour moi.
Vous devez vous connecter pour publier un commentaire.
Mise à jour:
Solution: utiliser le windowActionModeOverlay de la propriété. Dans votre thème:
et la actionmode sera affiché sur la barre d'action au lieu de le pousser vers le bas. (Si vous n'utilisez pas la dernière AppCompat ensuite, vous devez ajouter le "android:" préfixe à la propriété). Il permet essentiellement aux AppCompat savoir que vous avez une barre d'outils située en haut de l'écran et qu'il faut en tirer les ActionMode sur le dessus de cela.
Vieille réponse/solution de contournement:
Je suis tombé sur le même problème. N'importe quel thème que j'ai mis, il pousse toujours vers le bas la Barre d'outils-je définir comme ActionBar. J'ai essayé avec et sans le soutien de la bibliothèque, mais il n'avait pas d'importance.
Malheureusement je n'ai pas pu régler le problème, alors j'ai construit une solution de contournement à la place. Dans mon
ActionModeCallback
'sonCreateActionMode
- je cacher la barre d'action:et dans
onDestroyActionMode
je la montre à nouveau:Le masquage/affichage qui se passe si rapidement, qu'il n'est pas visible sur mon périphériques de test. Il y a bien sûr un inconvénient: bien que l'entrée-de l'animation fonctionne toujours, la sortie-l'animation de l'contextuel de la barre d'action se perd parce que la Barre d'outils apparaît immédiatement sur elle. Mais jusqu'à ce que nous trouver une meilleure solution, je suppose que nous sommes coincés avec ce.
(Mon Activité est en fait l'extension d'une coutume
BaseActivity
classe qui possède une méthode appeléegetActionBarToolbar()
, pris de la Google I/O 2014 app code source, donc je peux facilement obtenir de l'extraction de la Barre d'outils:Dommage que le I/O application n'utilise pas le contextuel de la barre d'action.)
Ne pas commencer sur votre activité, mais sur votre barre d'outils. En vous activité:
et vous devez les utiliser
Juste un petit ajout:
Pour
de travail, il est important d'appeler
super.onCreate(savedInstanceState)
AVANT appelsetContentView(R.layout.your_activity)
dans votre activité.Ça fait vraiment une différence dans ce cas!
Dans mon cas,
<item name="windowActionModeOverlay">true</item>
n'a pas de travail,mais ce travail:
<item name="android:windowActionModeOverlay">true</item>
,leandroid
est la clé.<item name="windowActionModeOverlay">true</item>
avec le appcompat de la barre d'outils, sinon vous utilisez leandroid
espace de noms.Jacob solution a fonctionné pour moi, mais le contexte ActionBar a été transparent et la Barre d'outils visible à travers elle. Cela peut être résolu de la manière suivante:
Le thème "AppTheme.De Base" doit être appliqué à la Barre d'outils.
Plus de détails concernant contextuelle ActionBar style:
comment Personnaliser l'Contextuel de la Barre d'Action à l'aide de appCompat dans la conception de matériel
Méthode très utile pour apporter de la barre d'outils à l'avant
toolbar.bringToFront()
View.bringToFront()
est très lourde opération et doit généralement être évitée à tout prix.Un 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'ensemble de l'interface utilisateur dans les fragments (ft.replace(android.R.id.content, fragment)
).