我希望在运行时切换ActionBar
上“向上”按钮(左箭头)的可见性。我尝试使用商品ID onPrepareOptionsMenu
来访问R.id.home
中的按钮,因为此ID在onOptionsItemSelected
中有效,但我在IndexOutOfBoundsException
中为该特定行继续获取onPrepareOptionsMenu
在活动的创造上。 “向上”按钮的正确项目ID是多少?或者有更好的方法在运行时切换“向上”按钮 吗?
这是我的代码:
public boolean onPrepareOptionsMenu(Menu menu) {
super.onPrepareOptionsMenu(menu);
MenuItem up = menu.getItem(R.id.home);
if (phase != Phase.IDLE) { // this is the runtime situation in which I want to disable the Up navigation
up.setVisible(false);
} else {
up.setVisible(true);
}
return true;
}
我也试过android.R.id.home
,得到了同样的错误。
答案 0 :(得分:1)
我通过Android文档找到了解决方案,并认为最好将其重新发布到此处。尽管没有其他答案完全可以触发“向上”按钮(至少在我正在使用的平台上无效),但是其中一些(以及注释)非常有帮助,特别是在指示我使用ActionBar.setDisplayHomeAsUpEnabled()
时。但是,此处的键是对 invalidateOptionsMenu()
的调用,该调用强制重新绘制菜单。
在Android 3.0及更高版本上,选项菜单始终被认为是 在应用程序栏中显示菜单项时打开。当一个事件 发生并且您要执行菜单更新时,必须调用 invalidateOptionsMenu()请求系统调用 onPrepareOptionsMenu()。
所以我的最终解决方案是:
ActionBar
存储为实例变量(感谢@rupinderjeet); setDisplayHomeAsUpEnabled()
上的ActionBar
; invalidateOptionsMenu()
后立即致电setDisplayHomeAsUpEnabled()
。 答案 1 :(得分:0)
有没有更好的方法在运行时切换“向上”按钮?
全局声明变量,
private ActionBar supportActionBar;
在onCreate()
,
setSupportActionBar(toolbar); // v7.Toolbar from support package
supportActionBar = getSupportActionBar();
以您想要的方法,
if (supportActionBar != null) {
supportActionBar.setDisplayHomeAsUpEnabled(true); // or false
}
答案 2 :(得分:0)
如果您使用默认工具栏
//show
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
//hide
getSupportActionBar().setDisplayHomeAsUpEnabled(false);
如果您使用的是自定义工具栏。
// get a refrence to your toolbar
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
答案 3 :(得分:0)
如果您使用默认操作栏,则获取操作栏和setDisplayHomeAsEnabled(true)。
public Bitmap drawOnToCanvas(Bitmap bitmap, Matrix currentMatrix){
float centerX = (x - (markerBitmap.getWidth()/2));
float centerY = (y + (markerBitmap.getHeight()/2));
Canvas canvas = new Canvas(bitmap);
canvas.drawBitmap(bitmap, currentMatrix, null);
canvas.drawBitmap(markerBitmap, centerX , centerY, null);
return bitmap;
}
并设置后退箭头的任何操作,
ActionBar actionBar = getSupportActionBar();
if (actionBar != null)
{
//setting action bar with custom color defined in colors
actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setDisplayShowHomeEnabled(true);
actionBar.setBackgroundDrawable(new
ColorDrawable(ContextCompat.getColor(context, R.color.action_bar)));
actionBar.setTitle("ActionBar Name");
}