Java “如何访问”;“向上”;按钮,并在运行时切换其可见性
我想在运行时切换Java “如何访问”;“向上”;按钮,并在运行时切换其可见性,java,android,android-actionbar,android-navigation,Java,Android,Android Actionbar,Android Navigation,我想在运行时切换ActionBar上的“向上”按钮(左箭头)的可见性。我尝试使用项目idR.id.home访问onprepareoptions菜单中的按钮,因为此id在onoptionsintemselected中工作,但是我在创建活动时不断获得onprepareoptions菜单中特定行的索引自动边界异常。“向上”按钮的正确项目id是什么?还是有更好的方法在运行时切换“向上”按钮 这是我的密码: public boolean onPrepareOptionsMenu(Menu menu) {
ActionBar
上的“向上”按钮(左箭头)的可见性。我尝试使用项目idR.id.home
访问onprepareoptions菜单中的按钮,因为此id在onoptionsintemselected
中工作,但是我在创建活动时不断获得onprepareoptions菜单中特定行的索引自动边界异常。“向上”按钮的正确项目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;
}
我也试过安卓.R.id.home
,得到了同样的错误
是否有更好的方法在运行时切换“向上”按钮
全局声明变量
private ActionBar supportActionBar;
在onCreate()
中
用你想要的方法
if (supportActionBar != null) {
supportActionBar.setDisplayHomeAsUpEnabled(true); // or false
}
如果使用默认工具栏
//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);
如果您使用的是默认操作栏,则获取操作栏并设置DisplayHomeAsEnabled(true)
以及设置后退箭头按钮的任何操作
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == android.R.id.home) {
// home (back arrow) icon id
// do Task here
}
我通过Android文档找到了解决方案,并认为最好将其发布回这里。尽管其他答案中没有一个完全适用于切换向上按钮(至少在我使用的平台上没有),但其中一些答案(以及注释)非常有用,特别是在指向我使用ActionBar.setDisplayHomeAsUpEnabled()
时。但是,这里的关键是调用无效操作菜单()
,强制重新绘制菜单
引述:
在安卓3.0及更高版本上,选项菜单被认为总是
当应用程序栏中显示菜单项时打开。当一件事发生时
如果要执行菜单更新,则必须调用
InvalidateOptions功能表()请求系统调用
onPrepareOptions菜单()
因此,我的最终解决方案是:
- 将
ActionBar
存储为实例变量(感谢@rupinderjeet)李>
- 每当我想切换向上按钮时,在
操作栏上调用setDisplayHomeAsUpEnabled()
李>
- 每次调用
setDisplayHomeAsUpEnabled()
后立即调用InvalidateOptions菜单()
android.R.id.home
?@向导我尝试过,同样的错误:(getItem()
采用索引值,这就是为什么会出现特定异常。findItem()
接受ID,但是,即使在活动中有ID为android.R.ID.home的视图,它也不是选项菜单中的一项。您也可以通过常规的findViewById()
调用来获得它。不过,根据您的情况,可能没有带有该ID的主页按钮。
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");
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == android.R.id.home) {
// home (back arrow) icon id
// do Task here
}