J'ai un problème étrange, j'utilisais un fichier menu.xml dans mon application Android comme ceci:
<menu xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:compat="http://schemas.Android.com/apk/res-auto" >
<item
Android:id="@+id/action_refresh"
Android:orderInCategory="100"
Android:title="@string/action_refresh"
Android:icon="@drawable/toc"
compat:showAsAction="always"/>
</menu>
et cela fonctionnait bien, mais il y a quelques jours, je mettais à jour mon Eclipse vers la dernière version, et après cela, l'application: showAsAction = "always" affiche l'erreur:
Devrait utiliser Android: showAsAction lorsque vous n'utilisez pas la bibliothèque appcompat Après cela, les icônes de la barre d’action ont été déplacées vers la barre de débordement et ne sont plus affichées dans la barre d’action.
de toute façon, la bibliothèque appcompat est le parent de mon style de base . que dois-je faire pour résoudre ce problème?
Vous devez faire trois choses-
Ajoutez ces 3 choses xmlns:tools="schemas.Android.com/tools"
tools:context="com.example.sample.YourActivity" xmlns:yourapp="http://schemas.Android.com/apk/res-auto"
à votre tag <menu>
avec le xmlns:Android="http://schemas.Android.com/apk/res/Android"
habituel
Ajoutez yourapp:showAsAction="ifRoom"
à votre <item>
.
Enfin, nettoyez votre projet via Projet -> Nettoyer ...
La dernière étape est ce qui l'a résolu pour moi. Il suffit de nettoyer le projet (ils peuvent être tellement sales parfois)
Voici à quoi ressemble le code final:
<menu xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:tools="schemas.Android.com/tools"
tools:context="com.example.sample.YourActivity"
xmlns:yourapp="http://schemas.Android.com/apk/res-auto" >
<item
Android:id="@+id/action_share"
Android:orderInCategory="100"
Android:title="Share"
Android:icon="@drawable/ic_share_white"
yourapp:showAsAction="ifRoom" />
</menu>
Cela fonctionne pour moi, j'ai utilisé appcompatlibrary:
compat:showAsAction="always"
au lieu de:
app:showAsAction="always"
Et pour utiliser compat: showAsAction = "always", Dans menu.xml, incluez la ligne:
<menu
......
<!-- include the below line -->
xmlns:compat="http://schemas.Android.com/apk/res-auto" >
Face au même problème. Ces deux options ont fonctionné pour moi:
1.Including - xmlns: compat = "http://schemas.Android.com/apk/res-auto"> puis en utilisant: "compat: showAsAction =" ifRoom "/>"
2. Ne pas inclure le compat et simplement utiliser: app: showAsAction = "ifRoom" />
PS: Utiliser Android Studio.
Devrait utiliser Android: showAsAction lorsque vous n'utilisez pas la bibliothèque appcompat
Problème: garantit que les éléments de menu utilisent le bon espace de nomsId: AppCompatResource
Lorsque vous utilisez la bibliothèque appcompat, les ressources de menu doivent faire référence à showAsAction dans l’application: namespace, pas à l’Android: namespace.
De même, lorsque vous n'utilisez pas la bibliothèque appcompat, vous devez utiliser l'attribut Android: showAsAction.
<menu xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:tools="http://schemas.Android.com/tools"
xmlns:compat="http://schemas.Android.com/apk/res-auto" >
<item
Android:id="@+id/action_refresh"
Android:orderInCategory="100"
Android:title="@string/action_refresh"
Android:icon="@drawable/toc"
tools:ignore="AppCompatResource"
compat:showAsAction="always"/>
</menu>
Tout ce que vous avez à faire est d'ajouter la ligne suivante à votre élément item
pour supprimer l'avertissement. Avoir l'espace de noms compat
vs app
pour "http://schemas.Android.com/apk/res-auto"
ne fait rien de spécial.
tools:ignore="AppCompatResource"
code complet:
<menu xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:compat="http://schemas.Android.com/apk/res-auto" >
<item
Android:id="@+id/action_refresh"
Android:orderInCategory="100"
Android:title="@string/action_refresh"
Android:icon="@drawable/toc"
tools:ignore="AppCompatResource"
compat:showAsAction="always"/>
</menu>
Remarque: la balise compat
peut être app
ou celle que vous souhaitiez.