如何动态更改OverflowButton的按下状态背景

时间:2015-02-13 17:26:23

标签: android customization android-toolbar

拥有android.support.v7.widget.Toolbar,它的背景颜色会根据不同的情况而改变。 OverflowButton按钮(工具栏右侧的三个垂直点)按下时始终具有相同的背景。

看到一些关于如何静态更改的帖子,如下所述。但真正想要的是根据工具栏的背景颜色动态地进行。

有什么想法吗?

change statically

您可以使用以下样式声明更改用于它的图像。

<style name="MyCustomTheme" parent="style/Theme.Holo">
    <item name="android:actionOverflowButtonStyle">@style/MyCustomTheme.OverFlow</item>
</style>

<style name="MyCustomTheme.OverFlow">
    <item name="android:src">@drawable/my_overflow_image</item>
</style>

如果你正在使用ActionBarSherlock,那么这是怎么做的

<style name="MyCustomTheme" parent="style/Theme.Sherlock">
    <item  name="android:actionOverflowButtonStyle">@style/MyCustomTheme.OverFlow</item>
    <item name="actionOverflowButtonStyle">@style/MyCustomTheme.OverFlow</item>
</style>

<style name="MyCustomTheme.OverFlow">
    <item name="android:src">@drawable/my_overflow_image</item>
</style>

1 个答案:

答案 0 :(得分:0)

编辑 - 答案应该是: 可以通过在actionOverflowButtonStyle样式中设置部分透明背景来实现,这样就可以混合工具栏的颜色。

一个解决方案可能只是通过使所有工具栏透明来禁用按下状态,但这是不可取的。

另一个发现,但感觉像是一个黑客。 不确定是否有人有更好的方法来访问溢出按钮,因此可以使用适当的drawable动态设置背景。

来自this bug report

可以按照以下setupOverflowMenuButton()完​​成。

public boolean setupOverflowMenuButton (Menu menu, Toolbar toolbar) {
    Toolbar t = toolbar;
    for(int i = 0; i < t.getChildCount(); i++) {
        if(t.getChildAt(i) instanceof ActionMenuView) {
            ActionMenuView v = (ActionMenuView)t.getChildAt(i);
            for(int j = 0; j < v.getChildCount(); j++) {
                if(v.getChildAt(j) instanceof TintImageView) {
                    TintImageView v1 = (TintImageView)v.getChildAt(j);

v1.setBackgroundResource(R.drawable.overflow_bt_bg_selector);
                 }
            }
        }
    }
    return super.onPrepareOptionsMenu(menu);
}