web-dev-qa-db-fra.com

actionlayout sur menuitem ne fait rien

je mets un actionLayout sur un élément de menu et je mets la couleur et l'image d'arrière-plan, mais ce n'est pas respecté. dans mon activité, j'ai:

getMenuInflater().inflate(R.menu.submit_action, menu);

mon submit_action est:

<menu xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:app="http://schemas.Android.com/apk/res-auto">
    <item Android:id="@+id/action_submit"
        Android:actionLayout="@layout/check"
        app:showAsAction="always"  />
</menu>

ma disposition de chèque est

<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    style="?android:attr/actionButtonStyle"
    Android:layout_width="fill_parent"
    Android:layout_height="fill_parent"
    Android:background="#e8e8e8"
    Android:clickable="true"
    Android:contentDescription="lol" >

    <ImageView
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:contentDescription="@null"
        Android:scaleType="centerInside"
        Android:src="@drawable/ic_action_tick" />

</RelativeLayout>

mais même avec toute cette configuration, voici comment la barre d'action apparaît, ne montrant pas du tout mon menu (mais il est là, car il répond au clic, mais n'apparaît pas):

enter image description here

55
tipu

Essayez app:actionLayout="@layout/check" au lieu de Android:actionLayout="@layout/check".

Si vous utilisez ActionbarSherlock ou AppCompat, le Android: l'espace de noms ne fonctionnera pas pour MenuItems. Cela est dû au fait que ces bibliothèques utilisent des attributs personnalisés qui imitent les API Android, car ils n'existaient pas dans les versions antérieures du cadre.

216
Ben Harris

lors de l'utilisation d'Appcompact, l'élément de menu sera comme

<item Android:id="@+id/cart"
    app:actionLayout="@layout/actionbar_cart"
    Android:title="@string/action_cart"
    app:showAsAction="always"
 />
7
Tarun Voora

La réponse de Ben Harris est absolument correcte. Cependant, dans certains cas, comme lors de l'utilisation d'attributs tels que:

      app:showAsAction="ifRoom|collapseActionView"

utilisé dans SearchView (dans mon cas), la vue de mise en page n'est pas affichée et cela m'a causé beaucoup de maux de tête. Il semble que collapseActionView ne soit pas pris en charge avec la vue d'action dans appcombat. Considérez donc cela également lorsque vous faites vos affaires.

5
neaGaze

utilisez l'espace de noms de l'application au lieu de Android et cela fonctionnera bien.

<menu xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:app="http://schemas.Android.com/apk/res-auto">
    <item Android:id="@+id/action_submit"
        app:actionLayout="@layout/check"
        app:showAsAction="always"  />
</menu>
0
coding.cat3