Android 工具栏菜单未显示

Android toolbar menu is not showing

我正在尝试向工具栏添加一个菜单。 onCreateOptionsMenu 调用了我的 Activity 方法,但没有出现菜单。

这是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);
    }

您的仪表板布局中是否有工具栏?。在 activity 中调用 setSupportActionBar(toolbar)。为活动使用 Theme.AppCompat.NoActionBar 主题(如果您在其中使用工具栏)

import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.support.v7.widget.Toolbar;
import android.view.Menu;

public class DashboardActivity extends ActionBarActivity {

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
  setSupportActionBar(toolbar);
  getSupportActionBar().setDisplayHomeAsUpEnabled(true);
  getSupportActionBar().setHomeButtonEnabled(true);
}

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

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    int id = item.getItemId();
    if (id == R.id.action_settings) {
        return true;
    }
    return super.onOptionsItemSelected(item);
}
}

检查你的风格。

<resources>

<!-- Base application theme. -->
<style name="AppTheme.Base" parent="Theme.AppCompat.NoActionBar">
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="android:windowBackground">@color/white</item>
    <item name="colorAccent">@color/colorAccent</item>
</style>

<style name="AppTheme" parent="AppTheme.Base">

</style>

<style name="ToolbarTheme" parent="AppTheme" >
</style>

<color name="light">#FFBB33</color>
<color name="colorPrimary">#FFBB33</color>
<color name="textColorPrimary">#FFBB33</color>
<color name="colorPrimaryDark">#FF8800</color>
<color name="colorAccent">#ff9977</color>
<color name="white">#ffffff</color>

</resources>

检查您的布局。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">

<android.support.v7.widget.Toolbar
    android:id="@+id/toolbar"
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:minHeight="?attr/actionBarSize"
    app:titleMarginStart="20dp"
    android:paddingRight="10dp"
    android:background="@color/colorPrimaryDark"
    app:theme="@style/ToolbarTheme" />

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginLeft="15dp"
    android:text="Hello Toolbar" />

</LinearLayout>

在清单activity中添加主题

android:theme="@style/AppTheme"

尝试以下操作:

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

<item
    android:id="@+id/action_settings"
    android:orderInCategory="100"
    android:showAsAction="never"
    android:title="@string/action_settings"/>
</menu>

和Java代码:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

尝试更改:

 ....
xmlns:app="http://schemas.android.com/apk/res-auto" >
 ....
app:showAsAction="ifRoom" 

至:

 ....
xmlns:yourapp="http://schemas.android.com/apk/res-auto" >
 ....
yourapp:showAsAction="ifRoom" 

https://developer.android.com/training/basics/actionbar/adding-buttons.html

我不确定为什么,但是当我在 onPrepareOptionsMenu 方法中放置所有相关的菜单膨胀时,一切正常。

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

    return super.onCreateOptionsMenu(menu);
}

如果您使用 Toolbar,您需要将其设置为 onCreate 中的支持操作栏:

setSupportActionBar(toolbar);

我也遇到了同样的问题,但实际错误是,我忘记在java中引入工具栏activity

AppCompactActivity 下,在创建方法下通过 id 定义工具栏并调用 setSupportActionBar(ToolBar);

示例如下:

public class secondActivity extends AppCompatActivity {
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);

        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        toolbar.showOverflowMenu();

您需要在 activity 的 onCreateOptionsMenu 中扩充菜单:

 @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.mymenu, menu);
        return super.onCreateOptionsMenu(menu);
    }

当我将其更改为 app:showAsAction 至 android:showAsAction

时问题已解决

如果您从片段中扩充菜单,例如通过重写 onCreateOptionsMenu 方法,确保在片段

onCreateView 中调用 setHasOptionsMenu(true)

就我而言,这太简单了。 我的工具栏是 AppBarLayout 的子项,出于某种原因,当我设置带有约束布局的工具栏时,工具栏的 layout_width xml 参数设置为 0dp。所以工具栏在那里,但看不见... (>_<)

因此,如果以上内容对您没有帮助,请检查 "layout_width" 和 "layout_height" 参数。

希望这会节省一些人的时间:)

在mipmap文件夹下添加你想要的图标

创建 menu_analysis.xml(在菜单文件夹 values.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="@mipmap/ic_menu_options"
            android:title=""
            app:showAsAction="always" />
</menu>

现在在您的 Java class

下打开 PrepareOptionMenu
@Override
public boolean onPrepareOptionsMenu(final Menu menu) {
    getMenuInflater().inflate(R.menu.menu_analysis, menu);
    return super.onCreateOptionsMenu(menu);
}

尽管接受的答案确实有效,但它会导致我的菜单项呈现两次。由于我刚刚解决了这个问题,请尝试以下操作:

  1. 记得 return true; 而不是 super.onCreateOptionsMenu(menu);
  2. 记得设置支持动作条setSupportActionBar(findViewById(R.id.toolbar))
  3. 如果您使用自定义工具栏,您可能想要关闭默认应用标题:getSupportActionBar().setDisplayShowTitleEnabled(false)

在 onCreate 方法中使用 setSupportActionBar(toolbar)。

我写的像,

MenuInflater(this).inflate(R.menu.my_menu, menu)

但是,我改变了代码,

menuInflater.inflate(R.menu.my_menu, menu)

成功了!

(我正在使用 kotlin,这段代码是用 Activity 编写的)

确保您的工具栏初始化是在添加 xml 布局文件之后进行的 像这样:

setContentView(R.layout.activity_main);
Toolbar toolbar = findViewById(R.id.toolbar1);
setSupportActionBar(toolbar);

只需在 onCreate 下尝试:

toolbar.inflateMenu(R.menu.menu);

使用XML代码

app:menu="menu_name"

使用java代码

     public class MainActivity extends AppCompatActivity { 
        
          private Toolbar toolbar;
        
            @Override
            protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_main);
                toolbar = findViewById(R.id.toolbar);
                setSupportActionBar(toolbar);
        }

@Override
    public boolean onCreateOptionsMenu(Menu menu) 
        getMenuInflater().inflate(R.menu.demo_menu,menu);
        return super.onCreateOptionsMenu(menu);
    }
  }

关于向工具栏添加导航图标、副标题​​、标题、品牌标志的完整文章 你必须通过 https://bedevelopers.tech/android-toolbar-implementation-using-android-studio/

回答晚了,希望这会为您节省大量代码。你不需要添加 ToolbarXML 文件,如果你的父主题是样式,而不是 Theme.MaterialComponents.DayNight.NoActionBar ,如果你有 Theme.MaterialComponents.DayNight.DarkActionBar 作为父主题theme.xmlstyle.xml,此外,您可以将特定主题添加到您的 activity。

第 1 步:在 res 下创建一个 menu 文件夹(如果不存在),然后创建一个菜单项,即 item_menu

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:title="Setting"
        app:showAsAction="always"
        android:icon="@drawable/ic_baseline_settings_24"
        android:id="@+id/action_setting"/>
</menu>

第 2 步:要在默认工具栏上显示菜单,请在 activity

中添加以下方法
//To show or inflate menu on the toolbar
    override fun onCreateOptionsMenu(menu: Menu?): Boolean {
        menuInflater.inflate(R.menu.item_menu, menu)
        return true
    }

第 3 步:要处理点击事件,请添加以下方法。

//Handle the click event on the menu item option
    override fun onOptionsItemSelected(item: MenuItem): Boolean {
        when (item.itemId) {
            R.id.action_setting -> {
                //DO YOUR STUFF HERE
            }
        }

        return false
    }

注意:您不需要将 TOOLBAR 添加到 XML 文件中。

如果没有任何效果,请尝试以下操作:

onCreateView() 方法中添加以下行

setHasOptionsMenu(true)

同时在 onViewCreated() 方法中添加下行

(activity as AppCompatActivity?)!!.setSupportActionBar(customToolbar as Toolbar?)

其中 customToolBar 是 xml 文件中添加的工具栏的 id