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; }解决菜单图标不显示问题
- 为菜单Item添加
showAsAction属性(控制图标是否在ActionBar或溢出菜单中显示):<item android:id="@+id/itemOne" android:icon="@drawable/baseline_settings_24" android:title="Settings" app:showAsAction="ifRoom|withText" /> - 针对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; }
- 为菜单Item添加
验证图标资源有效性
确认baseline_settings_24、baseline_logout_24图标已正确放置在res/drawable(或对应分辨率的drawable文件夹)中,且图标本身非透明、颜色与菜单背景有区分度。手动配置Toolbar(若使用无ActionBar主题)
若需保留NoActionBar主题,需在布局中添加Toolbar并设置为ActionBar:- 布局文件添加Toolbar:
<androidx.appcompat.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" android:background="?attr/colorPrimary" /> - 在Activity的
onCreate方法中绑定并设置:@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Toolbar toolbar = findViewById(R.id.toolbar); setSupportActionBar(toolbar); }
- 布局文件添加Toolbar:
内容的提问来源于stack exchange,提问作者Alon Belkin
相关产品推荐
相关产品推荐

