如何为菜单项 Android 添加分行符
How to add line divider for menu item Android
我的菜单项变大了,所以我想对它们进行分组并制作一个分隔线来分隔每个组。
我现在该怎么办?
<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>
您需要做的就是定义一个具有唯一 ID 的组,我已经检查了实现,如果组具有不同的 ID,它将创建一个分隔线。
示例菜单,创建分隔符:
<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>
希望这有帮助
更新
对于菜单项,您可以使用这个
<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>
actionLayout 文件将是
<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>
确保在扩充菜单时调用 MenuCompat.setGroupDividerEnabled(menu, true);
,否则组将不会被分隔符分隔!
示例:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_activity_main, menu);
MenuCompat.setGroupDividerEnabled(menu, true);
return true;
}
并确保菜单中有不同的组 xml,例如:
<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>
老问题,但上面的答案对我不起作用(我反对为单个项目添加 "groups")。起作用的是添加如下样式元素:
<!-- 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>
引用
<style name="PopupMenuListView" parent="@style/Widget.AppCompat.ListView.DropDown">
<item name="android:divider">#dddddd</item>
<item name="android:dividerHeight">1dp</item>
</style>
在同一个 res/values/styles.xml 文件中。希望对您有所帮助!
如果您需要在溢出菜单中添加垂直线(最右边的省略号):
假设您已经添加了一个新的菜单资源文件,请执行以下操作。
对菜单项进行分组并为每个组分配一个唯一的 ID
<group android:id="@+id/group1">
<item
android:id="@+id/action_about"
android:orderInCategory="100"
android:title="@string/about"
app:showAsAction="never" />
</group>
<group android:id="@+id/group2">
<item
android:id="@+id/action_settings"
android:orderInCategory="200"
android:title="@string/settings"
app:showAsAction="never" />
</group>
当您在 Activity 的 oncreate 方法中扩充菜单时:
getMenuInflater().inflate(R.menu.main, menu);//inflate menu
MenuCompat.setGroupDividerEnabled(menu, true);//add horizontal divider
我的菜单项变大了,所以我想对它们进行分组并制作一个分隔线来分隔每个组。 我现在该怎么办?
<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>
您需要做的就是定义一个具有唯一 ID 的组,我已经检查了实现,如果组具有不同的 ID,它将创建一个分隔线。
示例菜单,创建分隔符:
<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>
希望这有帮助
更新
对于菜单项,您可以使用这个
<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>
actionLayout 文件将是
<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>
确保在扩充菜单时调用 MenuCompat.setGroupDividerEnabled(menu, true);
,否则组将不会被分隔符分隔!
示例:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_activity_main, menu);
MenuCompat.setGroupDividerEnabled(menu, true);
return true;
}
并确保菜单中有不同的组 xml,例如:
<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>
老问题,但上面的答案对我不起作用(我反对为单个项目添加 "groups")。起作用的是添加如下样式元素:
<!-- 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>
引用
<style name="PopupMenuListView" parent="@style/Widget.AppCompat.ListView.DropDown">
<item name="android:divider">#dddddd</item>
<item name="android:dividerHeight">1dp</item>
</style>
在同一个 res/values/styles.xml 文件中。希望对您有所帮助!
如果您需要在溢出菜单中添加垂直线(最右边的省略号):
假设您已经添加了一个新的菜单资源文件,请执行以下操作。
对菜单项进行分组并为每个组分配一个唯一的 ID
<group android:id="@+id/group1"> <item android:id="@+id/action_about" android:orderInCategory="100" android:title="@string/about" app:showAsAction="never" /> </group> <group android:id="@+id/group2"> <item android:id="@+id/action_settings" android:orderInCategory="200" android:title="@string/settings" app:showAsAction="never" /> </group>
当您在 Activity 的 oncreate 方法中扩充菜单时:
getMenuInflater().inflate(R.menu.main, menu);//inflate menu MenuCompat.setGroupDividerEnabled(menu, true);//add horizontal divider