安卓工具栏菜单未显示

36

我想在工具栏中添加一个菜单。

我的ActivityonCreateOptionsMenu方法被调用,但没有菜单出现。

这是来自菜单文件夹的dashboard.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="com.app.android.ui.dashboard.DashboardActivity">

    <item
        android:id="@+id/action_scan_qr"
        android:icon="@drawable/ic_drawer"
        android:title="@string/menu_scan_qr"
        app:showAsAction="always" />
</menu>

注意: 此菜单的图标颜色比操作栏的背景颜色更暗,因此应该可见。

在 Activity 中填充菜单:

public class DashboardActivity extends ActionBarActivity {

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

    return true;
}

应用程序的主题:

<style name="Theme.Application.Base" parent="Theme.AppCompat.Light">
        <item name="colorPrimary">@android:color/white</item>
        <item name="colorPrimaryDark">@android:color/white</item>
        <item name="android:windowNoTitle">true</item>
        <item name="windowActionBar">false</item>
        <item name="drawerArrowStyle">@style/Theme.Application.DrawerArrowStyle</item>
        <item name="android:textColorSecondary">@android:color/darker_gray</item>
</style>

为什么调用了 onCreateOptionsMenu,但菜单没有出现。我正在使用 appcompat-v7:21.0.3
编辑:
    @Override
    protected void onCreate(final Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(getContentViewId());

        toolbar = (Toolbar) findViewById(R.id.tool_bar);
        if (toolbar == null) {
            throw new Error("Can't find tool bar, did you forget to add it in Activity layout file?");
        }

        setSupportActionBar(toolbar);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        getSupportActionBar().setHomeButtonEnabled(true);
    }

尝试在你的xml项中添加android:orderInCategory="100" - Skizo-ozᴉʞS ツ
1
你的Activity布局长什么样?它是否包含一个Toolbar视图,并且你是否通过setSupportActionBar(toolbar)将其设置到活动中? - npace
我在从活动布局文件中膨胀工具栏后,使用 setSupportActionBar(toolbar)。 - Procurares
Joan,orderInCategory 没有帮助。 - Procurares
尝试将return true;替换为return(super.onCreateOptionsMenu(menu)); - Skizo-ozᴉʞS ツ
22个回答

0

覆盖onCreateOptionsMenu可以解决问题,但是当您想要将不同的菜单注入到片段中时,onCreateOptionsMenu()onPrepareOptionsMenu()方法在那里被弃用

相反,实现新的MenuProvider接口,并使用addMenuProvider()在Activity中链接此菜单提供程序,并在Fragment中添加不同的MenuProvider


class MainActivity : AppCompatActivity() {

    private lateinit var binding: ActivityMainBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        ...
        setSupportActionBar(findViewById(R.id.toolbar))
        addMenuProvider(MenuProvider())
    }

    private class MenuProvider : androidx.core.view.MenuProvider {
        override fun onCreateMenu(menu: Menu, menuInflater: MenuInflater) {
            menuInflater.inflate(R.menu.fragment1, menu)
        }

        override fun onMenuItemSelected(menuItem: MenuItem): Boolean {
            TODO("Not yet implemented")
        }
    }
}

片段

 override fun onViewCreated(view: View, savedInstanceState: Bundle?) {

    val menuHost: MenuHost = requireActivity()
        menuHost.addMenuProvider(object : MenuProvider {
            override fun onCreateMenu(menu: Menu, menuInflater: MenuInflater) {
                menuInflater.inflate(R.menu.trips, menu)
            }

            override fun onMenuItemSelected(menuItem: MenuItem): Boolean {
                TODO("Not yet implemented")
            }
        }, viewLifecycleOwner, Lifecycle.State.RESUMED)

    ...

 }

-1

只需在onCreate下尝试这个:

toolbar.inflateMenu(R.menu.menu);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接