Android:如何在操作栏中移除返回/主页按钮

44

我试图从操作栏中删除返回/主页按钮,但遇到了困难。

 getActionBar().setDisplayShowHomeEnabled(false);   //disable back button
 getActionBar().setHomeButtonEnabled(false);
在一个老一些的安卓手机上,通过这两行代码可以去掉返回按钮。但是在 Nexus 4 上,返回按钮依然存在只是被禁用了。同时我想在右侧添加一个菜单项,让其作为返回/主页按钮来替代原有的返回/主页按钮。我漏掉了什么?
10个回答

96
使用getActionBar()。setDisplayHomeAsUpEnabled(false)从操作栏中移除Home按钮。

3
你可以看到,我已经尝试过那个方法,但它不起作用。 - RyanCW
这是一种不同于 setDisplayShowHomeEnabled 的方法。你试过我发布的代码了吗?setDisplayShowHomeEnabled 方法用于禁用或启用向上箭头,而 setDisplayHomeAsUpEnabled 方法则将主页按钮放置在向上箭头中。 - ElectronicGeek
1
谢谢伙计,对此感到抱歉,这里显然很沮丧,当5分钟结束时我会接受你的答案。 - RyanCW
当你有多个片段和只有一个活动时,这个是如何工作的?从片段中无法访问getActionBar。我们应该能够告诉导航栏没有返回按钮而不必编写代码。 - JPM
肯定不再起作用了。自从我为此按钮实现了一个抽屉并且该按钮始终可见和可用,我一直将此设置设置为“false”。 - Akito
似乎在某些情况下,只有从onCreateOptionsMenu(menu: Menu, inflater: MenuInflater)调用时才能正常工作。 - marcRDZ

19

如果您的API级别在14或更高,并且没有使用ActionbarSherlock,则可以在onCreateOptionsMenu中使用以下代码来禁用向上按钮,删除左侧插入符号并删除图标:

ActionBar actionBar = getActionBar();
if (actionBar != null) {
    actionBar.setHomeButtonEnabled(false); // disable the button
    actionBar.setDisplayHomeAsUpEnabled(false); // remove the left caret
    actionBar.setDisplayShowHomeEnabled(false); // remove the icon
}

source: https://dev59.com/4W7Xa4cB1Zd3GeqPutwo#24967862


1
答案对我有用。只是我的要求是隐藏,因此添加了上面的代码而没有使用 actionBar.setHomeButtonEnabled(false)。由于它被隐藏了,所以不需要禁用它。 - arungiri_10

12

ElectronicGeeks的答案是正确的。

对于API小于11的情况,请使用:

getSupportActionBar().setDisplayHomeAsUpEnabled(false);


5

这将把主页图标作为向上箭头,但不会改变其行为(单击时打开导航抽屉)。此外,在硬件返回按下后,它将回到上一个屏幕,但主页图标不会显示。当按下后退按钮时,我会将setDisplayHomeAsUpEnabled()设置为false。 - VishalKale

4

对我来说,没有任何建议的解决方案可用。

但是这个可以:

// Hide the back button
mActionBar.setHomeAsUpIndicator(null);

这是一种“终极解决方案”的黑客方法,因此重新显示操作栏意味着再次设置其图标。


这真的是唯一一个真正有效的解决方案。谢谢。所有其他被滥用作答案的解决方案都不起作用! - Akito

3
这对我有用 :)
    ActionBar actionBar = getSupportActionBar();
    actionBar.setDisplayHomeAsUpEnabled(false);

2

对于Kotlin;

(activity as AppCompatActivity).supportActionBar?.setDisplayHomeAsUpEnable(false)

2

如果您将工具栏用作操作栏的情况:

Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);

使用以下代码隐藏导航按钮:

toolbar.setNavigationIcon(null);

2
仍然可见箭头 - Waldmann

0

这段代码对我有效

移除导航栏的代码 getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);

移除状态栏的代码 getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_FULLSCREEN);

但是上面的代码,当你触摸屏幕时会再次显示,所以如果你想要静态状态,请将这些代码组合在一起。

getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_IMMERSIVE);


这个答案与问题无关。 - Alex Busuioc

-1
你可以使用这段代码:
toggle.setDrawerIndicatorEnabled(false);

对我来说非常好用。


6
"Toggle object" 是什么? - Dan Chaltiel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接