背景:
我目前在HomeUp
启用了Activity
按钮,感谢:
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
根据Documentation,它与setHomeButtonEnabled
有关:
启用或禁用" home"操作栏一角的按钮[...]设置常量 DISPLAY_HOME_AS_UP 显示选项(setDisplayHomeAsUpEnabled方法)将自动启用主页按钮。
此外,我使用此样式在selector
中使用ActionBar
项目的状态背景进行自定义:
<style name="MainTheme" parent="@style/Theme.AppCompat.Light">
<item name="android:actionBarItemBackground">@drawable/ab_item_background</item>
<item name="actionBarItemBackground">@drawable/ab_item_background</item>
</style>
虽然效果很好,但在启用selector
时,我不想在HomeUp
按钮上使用可绘制的UpIndicator
。
我为什么需要它:
ActionBar的背景为灰色(相对于Theme.AppCompat.Light
),选择器在按下项目时使用绿色背景。但是,应用程序图标也是绿色,当按下该图标时,它会与背景按下状态合并。我需要避免使用HomeUp背景的drawable。
问题:
如何实现这一点,任何有关变通方法的想法?
注意:
我尝试搜索相关的attribute
,该版本允许使用应用程序图标和UpIndicator的自定义背景,在style.xml
中进行自定义,但我没有在setDisplayHomeAsUpEnabled(true)
中找到它Resources。
如果我使用setDisplayHomeAsUpEnabled(false)
和CustomView
,我会看到菜单项的预期行为(背景相对于其状态发生了更改),但是HomeUp按钮,尽管我有正确的行为它的背景,不再启用。
另外,我想避免在ActionBar中使用 _______________________________________________________________________________
| | | | |
| API | R.id.home | android.R.id.home | method |
|_____|________________________|_________________________|______________________|
| | | | |
| 8 | OK | -- | getParent() x 1 |
| 10 | OK | -- | getParent() x 1 |
| 11 | OK | -- | getParent() x 1 |
| 12 | OK | -- | getParent() x 1 |
| 13 | OK | -- | getParent() x 1 |
| 14 | -- | OK | getParent() x 1 |
| 15 | -- | OK | getParent() x 1 |
| 16 | -- | OK | getParent() x 1 |
| 17 | -- | OK | getParent() x 2 |
| 18 | -- | OK | getParent() x 2 |
| 19 | -- | OK | getParent() x 2 |
|_____|________________________|_________________________|______________________|
。
更新:
根据Adneal's answer,经过测试和研究,结果如下:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
// retrieve the two parents with "android.R.id.home"
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
// retrieve the first parent with "android.R.id.home"
} else {
// retrieve the first parent with "R.id.home"
}
然后,正确的条件应该是:
{{1}}
答案 0 :(得分:3)
您可以使用View.getParent
将主页按钮的背景设置为null
。
This is the layout that contains the home button一旦在ActionBarView
中膨胀,就会添加到up container layout,这是实际使用actionBarItemBackground
属性的内容。
但是,AppCompat
并未使用&#34; up容器&#34;布局,以及API级别18(Jelly Bean MR2)的正常ActionBar
。
因此,要更改主页按钮背景,您在使用支持库或API级别11-17&#39; View.getParent
时拨打ActionBar
,但当您和& #39;重新更改API等级18 +&#39; s。
View home;
final int version = Build.VERSION.SDK_INT;
if (version >= Build.VERSION_CODES.JELLY_BEAN_MR2) {
// Normal action bar, post-"up container"
home = (View) findViewById(android.R.id.home).getParent().getParent();
} else if (version >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
// Normal action bar, pre-"up container"
home = (View) findViewById(android.R.id.home).getParent();
} else {
// Support library action bar
home = (View) findViewById(R.id.home).getParent();
}
home.setBackgroundDrawable(null);
AppCompat
将来可以更新,以包含到#34; up容器&#34;布局,所以请记住,您可能需要稍后调整您的代码以适应这一点。