web-dev-qa-db-fra.com

Comment ajouter un séparateur de ligne pour l'élément de menu Android

Mon élément de menu devient plus grand pour que je veuille les regrouper et créer un séparateur de ligne pour séparer chaque groupe. Qu'est-ce que je devrais faire maintenant ?

    <menu xmlns:Android="http://schemas.Android.com/apk/res/Android"
        xmlns:app="http://schemas.Android.com/apk/res-auto">
<!--group1-->
            <item
                Android:id="@+id/action_addtag"
                Android:title="@string/add_hashtag_string"
                app:showAsAction="never" />
            <item
                Android:id="@+id/action_block_list"
                Android:title="Block"
                app:showAsAction="never" />
            <item
                Android:id="@+id/action_report_list"
                Android:title="Report"
                app:showAsAction="never" />
<!--group2-->
            <item
                Android:id="@+id/terms"
                Android:title="Terms"
                app:showAsAction="never" />
            <item
                Android:id="@+id/feedback"
                Android:title="FeedBack"
                app:showAsAction="never" />
<!--group3-->
            <item
                Android:id="@+id/action_setting"
                Android:title="Setting"
                app:showAsAction="never" />
    </menu>
17
phongvan

Tout ce que vous devez faire est de définir un groupe avec un ID unique, j'ai vérifié l'implémentation si le groupe a des identifiants différents, cela créera un diviseur.

Exemple de menu, création du séparateur:

<menu xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto"
xmlns:tools="http://schemas.Android.com/tools"
tools:context=".MainActivity">

<group Android:id="@+id/grp1">
    <item
        Android:id="@+id/navigation_item_1"
        Android:checked="true"
        Android:icon="@drawable/ic_home"
        Android:title="@string/navigation_item_1" />
</group>

<group Android:id="@+id/grp2">
    <item
        Android:id="@+id/navigation_item_2"
        Android:icon="@drawable/ic_home"
        Android:title="@string/navigation_item_2" />
</group>

j'espère que cela t'aides

MISE À JOUR

pour l'élément de menu peut être vous pouvez l'utiliser

    <menu xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:app="http://schemas.Android.com/apk/res-auto"
    xmlns:tools="http://schemas.Android.com/tools">
    <item
        Android:id="@+id/action_cart"
        Android:title="cart"
        Android:actionLayout="@layout/cart_update_count"
        Android:icon="@drawable/shape_notification"
        app:showAsAction="always"/>
</menu>

et le fichier actionLayout sera

 <LinearLayout
    xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="wrap_content"
    Android:layout_height="match_parent"
    Android:orientation="vertical">

    <View
        Android:id="@+id/divider"
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:background="@drawable/divider"/>

    <TextView
        Android:id="@Android:id/text"
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:background="?android:attr/selectableItemBackground"
        Android:gravity="center_vertical"          
        Android:textAppearance="?attr/textAppearanceListItemSmall"/>

</LinearLayout>
25
droidev

Assurez-vous d'appeler MenuCompat.setGroupDividerEnabled(menu, true); lorsque vous gonflez votre menu, sinon les groupes ne seront pas séparés par un séparateur!

Exemple:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.menu_activity_main, menu);

    MenuCompat.setGroupDividerEnabled(menu, true);

    return true;
}

Et assurez-vous d'avoir différents groupes dans votre menu xml, par exemple:

    <menu>
        <group Android:id="@+id/sorting" >
            <item
                Android:id="@+id/action_sorting_new_old"
                Android:title="@string/action_sorting_new_old"/>

            <item
                Android:id="@+id/action_sorting_a_z"
                Android:title="@string/action_sorting_a_z"/>
        </group>

        <group Android:id="@+id/settings">
            <item
                Android:id="@+id/action_settings"
                Android:title="@string/action_settings"/>
        </group>
    </menu>
29
HannaY

Ancienne question, mais les réponses ci-dessus ne fonctionnaient pas pour moi (et je m'oppose à l'ajout de "groupes" pour des éléments uniques). Ce qui a fonctionné, c'était l'ajout d'un élément de style comme suit:

    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.DayNight.DarkActionBar"> <!--  .Light.DarkActionBar"> -->
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">#17161B</item>
        <item name="colorAccent">@color/colorAccent</item>
        <item name="Android:dropDownListViewStyle">@style/PopupMenuListView</item>//<-add this
    </style>

qui fait référence

    <style name="PopupMenuListView" parent="@style/Widget.AppCompat.ListView.DropDown">
        <item name="Android:divider">#dddddd</item>
        <item name="Android:dividerHeight">1dp</item>
    </style>

dans le même fichier res/values ​​/ styles.xml. J'espère que ça aide!

0
kwishnu