如何在按下HomeUp时禁用背景颜色?

时间:2014-05-06 04:53:51

标签: android android-actionbar android-ui android-homebutton

背景:

我目前在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。

问题:

如何实现这一点,任何有关变通方法的想法?

注意:

  1. 我尝试搜索相关的attribute,该版本允许使用应用程序图标和UpIndicator的自定义背景,在style.xml中进行自定义,但我没有在setDisplayHomeAsUpEnabled(true)中找到它Resources

  2. 如果我使用setDisplayHomeAsUpEnabled(false)CustomView,我会看到菜单项的预期行为(背景相对于其状态发生了更改),但是HomeUp按钮,尽管我有正确的行为它的背景,不再启用。

  3. 另外,我想避免在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 | |_____|________________________|_________________________|______________________|


  4. 更新:

    根据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}}

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;布局,所以请记住,您可能需要稍后调整您的代码以适应这一点。