有没有办法在溢出菜单项中添加图标?
Is there any way to add icon in overflow menu item?
我在基本导航抽屉中使用溢出菜单。
我想在菜单项上显示图标和文本。
但是不管我做什么都不行。
这些是我在 menu.xml 代码中尝试的方法。
首先,这是一个普通的方式来放置'android:icon'
溢出_menu.xml
<?xml version="1.0" encoding="utf-8"?>
<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=".MovieList">
<item
android:id="@+id/menu_movie"
android:orderInCategory="150"
android:icon="@drawable/ic_search_black_24dp"
android:title="setting1"
app:showAsAction="never" />
<item
android:id="@+id/menu_gallery"
android:orderInCategory="150"
android:title="setting2"
android:icon="@drawable/ic_search_black_24dp"
app:showAsAction="never" />
<item
android:id="@+id/settings3"
android:orderInCategory="150"
android:icon="@drawable/ic_search_black_24dp"
android:title="setting2"
app:showAsAction="never" />
</menu>
其次,使用'android:actionLayout=""'代码
<?xml version="1.0" encoding="utf-8"?>
<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=".MovieList">
<item
android:id="@+id/menu_movie"
android:orderInCategory="150"
android:icon="@drawable/ic_search_black_24dp"
android:title="setting1"
android:actionLayout="@layout/overflow_menu_title"
app:showAsAction="never" />
<item
android:id="@+id/menu_gallery"
android:orderInCategory="150"
android:title="setting2"
android:icon="@drawable/ic_search_black_24dp"
android:actionLayout="@layout/overflow_menu_title"
app:showAsAction="never" />
<item
android:id="@+id/settings3"
android:orderInCategory="150"
android:icon="@drawable/ic_search_black_24dp"
android:actionLayout="@layout/overflow_menu_title"
android:title="setting2"
app:showAsAction="never" />
</menu>
overflow_menu_title.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:gravity="center_vertical"
android:padding="2dp"
android:orientation="horizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@color/colorPrimaryDark">
<ImageView
android:layout_width="24dp"
android:layout_height="24dp"
android:src="@drawable/ic_15"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="MOVIE"
android:textSize="24dp"/>
</LinearLayout>
我尝试过任何方法,但都失败了。
不知道为什么不能放图标
请帮帮我...
谢谢。
尝试在 overflow_menu.xml
中使用 PopupMenu
。
在 activity 中创建一个函数来初始化弹出窗口:
private void setupPopupMenu()
{
ImageButton menuButton = (ImageButton) findViewById(R.id.menu_button)
PopupMenu popupMenu = new PopupMenu(this, menuButton);
popupMenu.inflate(R.menu.overflow_menu);
popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
switch (item.getItemId()) {
case R.id.menu_movie:
break;
case R.id.menu_gallery:
break;
case R.id.settings3:
break;
default:
return false;
}
return true;
}
});
}
然后在您的 onCreate
方法中调用此函数。
如果您使用 Android 主题中的默认 Toolbar
或默认 ActionBar
,您可能需要实施自定义 Toolbar
布局:
<LinearLayout
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:orientation="horizontal">
<TextView
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="center|start"
android:text="Title"/>
<ImageButton
android:id="@+id/menu_button"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:background="?selectableItemBackgroundBorderless"
android:src="<your-button-image>"/>
</LinearLayout>
此外,像这样简化您的 overflow_menu
:
<?xml version="1.0" encoding="utf-8"?>
<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=".MovieList">
<item
android:id="@+id/menu_movie"
android:icon="@drawable/ic_search_black_24dp"
android:title="setting1" />
<item
android:id="@+id/menu_gallery"
android:title="setting2"
android:icon="@drawable/ic_search_black_24dp" />
<item
android:id="@+id/settings3"
android:icon="@drawable/ic_search_black_24dp"
android:title="setting2" />
</menu>
您可以在 onCreateOptionsMenu()
方法中使用 MenuBuilder
class 并设置 setOptionalIconsVisible(true)
以编程方式执行此操作
@Override
public void onCreateOptionsMenu(@NonNull Menu menu, @NonNull MenuInflater inflater) {
inflater.inflate(R.menu.overflow_menu, menu);
// Force showing icons for menu items
if (menu instanceof MenuBuilder)
((MenuBuilder) menu).setOptionalIconsVisible(true);
}
我在基本导航抽屉中使用溢出菜单。
我想在菜单项上显示图标和文本。
但是不管我做什么都不行。
这些是我在 menu.xml 代码中尝试的方法。
首先,这是一个普通的方式来放置'android:icon' 溢出_menu.xml
<?xml version="1.0" encoding="utf-8"?>
<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=".MovieList">
<item
android:id="@+id/menu_movie"
android:orderInCategory="150"
android:icon="@drawable/ic_search_black_24dp"
android:title="setting1"
app:showAsAction="never" />
<item
android:id="@+id/menu_gallery"
android:orderInCategory="150"
android:title="setting2"
android:icon="@drawable/ic_search_black_24dp"
app:showAsAction="never" />
<item
android:id="@+id/settings3"
android:orderInCategory="150"
android:icon="@drawable/ic_search_black_24dp"
android:title="setting2"
app:showAsAction="never" />
</menu>
其次,使用'android:actionLayout=""'代码
<?xml version="1.0" encoding="utf-8"?>
<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=".MovieList">
<item
android:id="@+id/menu_movie"
android:orderInCategory="150"
android:icon="@drawable/ic_search_black_24dp"
android:title="setting1"
android:actionLayout="@layout/overflow_menu_title"
app:showAsAction="never" />
<item
android:id="@+id/menu_gallery"
android:orderInCategory="150"
android:title="setting2"
android:icon="@drawable/ic_search_black_24dp"
android:actionLayout="@layout/overflow_menu_title"
app:showAsAction="never" />
<item
android:id="@+id/settings3"
android:orderInCategory="150"
android:icon="@drawable/ic_search_black_24dp"
android:actionLayout="@layout/overflow_menu_title"
android:title="setting2"
app:showAsAction="never" />
</menu>
overflow_menu_title.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:gravity="center_vertical"
android:padding="2dp"
android:orientation="horizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@color/colorPrimaryDark">
<ImageView
android:layout_width="24dp"
android:layout_height="24dp"
android:src="@drawable/ic_15"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="MOVIE"
android:textSize="24dp"/>
</LinearLayout>
我尝试过任何方法,但都失败了。
不知道为什么不能放图标
请帮帮我...
谢谢。
尝试在 overflow_menu.xml
中使用 PopupMenu
。
在 activity 中创建一个函数来初始化弹出窗口:
private void setupPopupMenu()
{
ImageButton menuButton = (ImageButton) findViewById(R.id.menu_button)
PopupMenu popupMenu = new PopupMenu(this, menuButton);
popupMenu.inflate(R.menu.overflow_menu);
popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
switch (item.getItemId()) {
case R.id.menu_movie:
break;
case R.id.menu_gallery:
break;
case R.id.settings3:
break;
default:
return false;
}
return true;
}
});
}
然后在您的 onCreate
方法中调用此函数。
如果您使用 Android 主题中的默认 Toolbar
或默认 ActionBar
,您可能需要实施自定义 Toolbar
布局:
<LinearLayout
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:orientation="horizontal">
<TextView
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="center|start"
android:text="Title"/>
<ImageButton
android:id="@+id/menu_button"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:background="?selectableItemBackgroundBorderless"
android:src="<your-button-image>"/>
</LinearLayout>
此外,像这样简化您的 overflow_menu
:
<?xml version="1.0" encoding="utf-8"?>
<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=".MovieList">
<item
android:id="@+id/menu_movie"
android:icon="@drawable/ic_search_black_24dp"
android:title="setting1" />
<item
android:id="@+id/menu_gallery"
android:title="setting2"
android:icon="@drawable/ic_search_black_24dp" />
<item
android:id="@+id/settings3"
android:icon="@drawable/ic_search_black_24dp"
android:title="setting2" />
</menu>
您可以在 onCreateOptionsMenu()
方法中使用 MenuBuilder
class 并设置 setOptionalIconsVisible(true)
@Override
public void onCreateOptionsMenu(@NonNull Menu menu, @NonNull MenuInflater inflater) {
inflater.inflate(R.menu.overflow_menu, menu);
// Force showing icons for menu items
if (menu instanceof MenuBuilder)
((MenuBuilder) menu).setOptionalIconsVisible(true);
}