che*_*ist 6 android android-menu android-toolbar
我正在尝试为我的工具栏显示一个下拉菜单,其中包含文本和图标:
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/menu_add"
android:title="@string/menu.add"
android:icon="@drawable/ic_add_black_24dp"
app:showAsAction="always" />
<item
android:id="@+id/menu_edit"
android:title="@string/menu.edit"
android:icon="@drawable/ic_create_black_24dp"
app:showAsAction="never" />
</menu>
Run Code Online (Sandbox Code Playgroud)
menu_add 确实与工具栏上的图标一起显示,但 menu_edit 只显示没有图标的文本。
这个答案:https : //stackoverflow.com/a/19750717/197127说谷歌已经按设计删除了它,但没有提到你可以如何覆盖它。
我还需要设备“菜单”按钮来显示相同的菜单。
Kik*_*kju 12
我创建了这样的东西:
@SuppressLint("RestrictedApi")
fun Menu.showIcons() {
(this as? MenuBuilder)?.setOptionalIconsVisible(true)
}
Run Code Online (Sandbox Code Playgroud)
它基本上适用于任何菜单。
对于工具栏,您可以onPrepareOptionsMenu在活动或片段中覆盖,并且在调用之前super只需调用,或者您可以像这样menu.showIcons()使用它。PopupMenuPopupMenu(requireContext(), anchor).menu.showIcons()
这段 Kotlin 代码对我有用。我用了“popup.setForceShowIcon(true)”
val popup = PopupMenu(上下文, 按钮);
popup.menuInflater.inflate(menuRes, popup.menu);
popup.setForceShowIcon(true)
完整代码写在下面
//R.menu.menu_popup -- Menu xml File
<menu
xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/menu_1"
android:icon="@drawable/email"
android:title="Email" />
<item android:id="@+id/menu_2"
android:icon="@drawable/phone"
android:title="Phone" />
</menu>
// Inside Activity
findViewById<Button>(R.id.button1).setOnClickListener {
show_PopUp_Menu(this, it, R.menu.menu_popup)
}
@SuppressLint("RestrictedApi")
fun show_PopUp_Menu(context: Context, button:Button, menuRes: Int) {
val popup = PopupMenu(context, button)
popup.menuInflater.inflate(menuRes, popup.menu)
popup.setOnMenuItemClickListener { menuItem: MenuItem ->
when(menuItem.itemId){
R.id.menu_1->{
Toast.makeText(this, "Menu 1 clicked", Toast.LENGTH_SHORT).show()
true
}
R.id.menu_2->{
Toast.makeText(this, "Menu 2 clicked", Toast.LENGTH_SHORT).show()
true
}
else -> false
}
}
popup.setOnDismissListener {
// Respond to popup being dismissed.
}
popup.setForceShowIcon(true)
popup.show()
}
Run Code Online (Sandbox Code Playgroud)
是的,它不会显示在新版本的支持库中,但您可以通过添加子菜单来解决这个问题。(您可以通过 xml 和代码添加它)。像这样:
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/action_settings"
android:icon="@drawable/abc_ic_menu_moreoverflow_mtrl_alpha"
android:title="@string/action_settings"
app:showAsAction="always">
<menu>
<item
android:icon="@drawable/ic_event"
android:title="@string/action_settings"
app:showAsAction="always" />
<item
android:icon="@drawable/ic_event"
android:title="@string/action_settings"
app:showAsAction="always" />
</menu>
</item>
</menu>
Run Code Online (Sandbox Code Playgroud)
希望它有所帮助:) 编辑:查看上述代码的快照:
=> 
| 归档时间: |
|
| 查看次数: |
10318 次 |
| 最近记录: |