[英]Android: how to show icon in ActionBar but not in the Options Menu?
[英]How to show menu icon in Actionbar?
我已将导航抽屉添加到我的主要活动中。 现在,我想在操作栏标题旁边有一个菜单图标。 所以我做了以下事情:
mDrawerToggle = new ActionBarDrawerToggle(this, drawerLayout, R.string.drawer_open, R.string.drawer_close)
{
@Override
public void onDrawerOpened(View drawerView) {
super.onDrawerOpened(drawerView);
invalidateOptionsMenu();
}
@Override
public void onDrawerClosed(View drawerView) {
super.onDrawerClosed(drawerView);
invalidateOptionsMenu();
}
};
mDrawerToggle.setDrawerIndicatorEnabled(false);
mDrawerToggle.setHomeAsUpIndicator(R.drawable.ic_drawer);
mDrawerToggle.setToolbarNavigationClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (dlDrawer.isDrawerVisible(GravityCompat.START)) {
dlDrawer.closeDrawer(GravityCompat.START);
} else {
dlDrawer.openDrawer(GravityCompat.START);
}
}
});
mDrawerToggle.syncState();
我也有:
getActionBar().setDisplayShowHomeEnabled(true);
getActionBar().setHomeButtonEnabled(true);
我不能使用getActionBar().setHomeAsUpIndicator(R.drawable.ic_drawer);
因为我的最低API级别是16。
这是菜单的xml:
<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.activities.MainActivity">
<item android:id="@+id/action_settings"
android:title="@string/action_settings"
android:orderInCategory="200" app:showAsAction="never" />
</menu>
但是,使用上述代码,菜单图标不会显示在应用程序图标旁边。 而且,点击应用程序图标完全没有反应。
我需要添加什么代码才能显示菜单图标,并且活动对点击应用程序图标有反应?
编辑
为了使应用程序图标单击以工作,我在onOptionsItemSelected
添加了以下代码:
int id = item.getItemId();
if (id == android.R.id.home) {
if (dlDrawer.isDrawerVisible(GravityCompat.START)) {
dlDrawer.closeDrawer(GravityCompat.START);
} else {
dlDrawer.openDrawer(GravityCompat.START);
}
}
但是,菜单图标仍未显示。
如下更改代码
mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout,
R.drawable.ic_drawer, //nav menu toggle icon
R.string.app_name, // nav drawer open - description for accessibility
R.string.app_name // nav drawer close - description for accessibility
){
public void onDrawerClosed(View view) {
getActionBar().setTitle(mTitle);
// calling onPrepareOptionsMenu() to show action bar icons
invalidateOptionsMenu();
}
public void onDrawerOpened(View drawerView) {
getActionBar().setTitle(mDrawerTitle);
// calling onPrepareOptionsMenu() to hide action bar icons
invalidateOptionsMenu();
}
};
mDrawerLayout.setDrawerListener(mDrawerToggle);
用于选项菜单
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// toggle nav drawer on selecting action bar app icon/title
if (mDrawerToggle.onOptionsItemSelected(item)) {
return true;
}
// Handle action bar actions click
switch (item.getItemId()) {
case R.id.action_settings:
return true;
default:
return super.onOptionsItemSelected(item);
}
}
/***
* Called when invalidateOptionsMenu() is triggered
*/
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
// if nav drawer is opened, hide the action items
boolean drawerOpen = mDrawerLayout.isDrawerOpen(mDrawerList);
menu.findItem(R.id.action_settings).setVisible(!drawerOpen);
return super.onPrepareOptionsMenu(menu);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.