You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android应用三点菜单不显示+XML菜单图标无显示求助

安卓选项菜单不显示及图标不可见问题解决思路

问题背景

尝试在应用顶部显示三点溢出菜单,点击弹出menu.xml中定义的选项,但运行时菜单不显示,XML中的图标也无法看到,已尝试调整onCreateOptionsMenu返回值及XML声明均无效。

现有代码

MainActivity.java

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater mi = getMenuInflater();
    mi.inflate(R.menu.menu, menu);
    //getMenuInflater().inflate(R.menu.menu, menu);
    return super.onCreateOptionsMenu(menu);
    //I have also tried return true
}

@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
    switch(item.getItemId()){
        case R.id.itemOne:
            Toast.makeText(this, "settings", Toast.LENGTH_SHORT).show();
            return true;
        case R.id.itemTwo:
            startActivity(new Intent(MainActivity.this, SettingsActivity.class));
        default:
            return super.onOptionsItemSelected(item);
    }
}

res/menu/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=".MainActivity">

    <item
        android:id="@+id/itemOne"
        android:icon="@drawable/baseline_settings_24"
        android:title="Settings" />
    <item
        android:id="@+id/itemTwo"
        android:icon="@drawable/baseline_logout_24"
        android:title="Logout" />
</menu>

排查及解决步骤

  • 检查Activity主题配置
    若当前使用NoActionBar系列主题(如Theme.MaterialComponents.DayNight.NoActionBar),系统不会默认渲染ActionBar,因此不会显示三点菜单。需修改AndroidManifest.xml中对应Activity的主题为带ActionBar的版本,例如:

    <activity
        android:name=".MainActivity"
        android:theme="@style/Theme.MaterialComponents.DayNight.DarkActionBar">
    </activity>
    
  • 修正onCreateOptionsMenu返回值
    必须返回true才能确保菜单被显示,super.onCreateOptionsMenu(menu)的返回值可能受主题影响返回false,修改后代码:

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu, menu);
        return true;
    }
    
  • 解决菜单图标不显示问题

    1. 为菜单Item添加showAsAction属性(控制图标是否在ActionBar或溢出菜单中显示):
      <item
          android:id="@+id/itemOne"
          android:icon="@drawable/baseline_settings_24"
          android:title="Settings"
          app:showAsAction="ifRoom|withText" />
      
    2. 针对Android 11+,部分主题默认会对菜单图标进行着色或隐藏,可在代码中强制显示:
      @Override
      public boolean onCreateOptionsMenu(Menu menu) {
          getMenuInflater().inflate(R.menu.menu, menu);
          for (int i = 0; i < menu.size(); i++) {
              MenuItem item = menu.getItem(i);
              // 取消图标着色,使用原始图标颜色
              if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
                  item.setIconTintList(null);
              }
          }
          return true;
      }
      
  • 验证图标资源有效性
    确认baseline_settings_24、baseline_logout_24图标已正确放置在res/drawable(或对应分辨率的drawable文件夹)中,且图标本身非透明、颜色与菜单背景有区分度。

  • 手动配置Toolbar(若使用无ActionBar主题)
    若需保留NoActionBar主题,需在布局中添加Toolbar并设置为ActionBar:

    1. 布局文件添加Toolbar:
      <androidx.appcompat.widget.Toolbar
          android:id="@+id/toolbar"
          android:layout_width="match_parent"
          android:layout_height="?attr/actionBarSize"
          android:background="?attr/colorPrimary" />
      
    2. 在Activity的onCreate方法中绑定并设置:
      @Override
      protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.activity_main);
          Toolbar toolbar = findViewById(R.id.toolbar);
          setSupportActionBar(toolbar);
      }
      

内容的提问来源于stack exchange,提问作者Alon Belkin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 23:38:14