如何动态更改 OverflowButton 的按下状态背景
how to dynamically change OverflowButton's background for press state
具有 android.support.v7.widget.Toolbar 并且它的背景颜色会根据不同的情况而变化。
溢出按钮按钮(工具栏右侧的三个垂直点)在按下时始终具有相同的背景。
看到一些关于如何静态更改的帖子,如下引述。但真正想要的是根据工具栏的背景颜色动态地做。
有什么想法吗?
至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>
编辑--答案应该是:
只需在actionOverflowButtonStyle样式中设置部分透明背景即可实现,这样工具栏的任何颜色都会被混合。
一个解决方案可能只是通过使其对所有工具栏透明来禁用按下状态,但这是不可取的。
找到了另一个,但感觉像是 hack。
不确定是否有人有更好的方法来访问溢出按钮,以便可以使用适当的 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);
}
具有 android.support.v7.widget.Toolbar 并且它的背景颜色会根据不同的情况而变化。 溢出按钮按钮(工具栏右侧的三个垂直点)在按下时始终具有相同的背景。
看到一些关于如何静态更改的帖子,如下引述。但真正想要的是根据工具栏的背景颜色动态地做。
有什么想法吗?
至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>
编辑--答案应该是: 只需在actionOverflowButtonStyle样式中设置部分透明背景即可实现,这样工具栏的任何颜色都会被混合。
一个解决方案可能只是通过使其对所有工具栏透明来禁用按下状态,但这是不可取的。
找到了另一个,但感觉像是 hack。 不确定是否有人有更好的方法来访问溢出按钮,以便可以使用适当的 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);
}