Mig*_*ieC 4 android android-appcompat android-imagebutton android-toolbar
我一直在寻找一种方法来动态更改工具栏(如ActionBar)中所有元素的颜色。
规格:
parent="Theme.AppCompat.Light.NoActionBar"在styles.xml上使用setSupportActionBar()在我的AppCompatActivity我已阅读以下帖子:
我现在正在做的是在工具栏上搜索ImageButton(在support actionbar中获取对抽屉切换的引用),然后setColorFilter()像下面的代码一样将它们应用于所有对象:
for (int i = 0; i < toolbar.getChildCount(); i++){
if (toolbar.getChildAt(i) instanceof ImageButton) {
ImageButton ib = (ImageButton) toolbar.getChildAt(i);
ib.setColorFilter(Color.parseColor("#A74231"), PorterDuff.Mode.SRC_ATOP);
}
}
Run Code Online (Sandbox Code Playgroud)
我改变的背景和文本颜色搭配:toolbar.setBackgroundColor和toolbar.setTitleTextColor。
对于菜单图标(包括溢出菜单图标):
MenuItem item2 = mMenu.findItem(R.id.actionbar_group_moreoverflow);
item2.getIcon().setColorFilter(color, PorterDuff.Mode.SRC_ATOP);
Run Code Online (Sandbox Code Playgroud)
的问题:有没有更好的办法做到这一点(改变工具栏的元素色彩动态)?
小智 5
我在这里面临着同样的问题。我为ToolBar的元素做了什么:
toolbar.setBackgroundColor(Color.parseColor("#xxxxxxxx"));toolbar.setTitleTextColor(Color.parseColor("#xxxxxxxx"));对于汉堡包/抽屉按钮:
int color = Color.parseColor("#xxxxxxxx");
final PorterDuffColorFilter colorFilter = new PorterDuffColorFilter(color, PorterDuff.Mode.SRC_ATOP);
for (int i = 0; i < toolbar.getChildCount(); i++){
final View v = toolbar.getChildAt(i);
if(v instanceof ImageButton) {
((ImageButton)v).setColorFilter(colorFilter);
}
}
Run Code Online (Sandbox Code Playgroud)对于ActionMenuItemView(工具栏的按钮,包括溢出按钮):
private void colorizeToolBarItem(AppCompatActivity activity, final PorterDuffColorFilter colorFilter, final String description) {
final ViewGroup decorView = (ViewGroup) activity.getWindow().getDecorView();
final ViewTreeObserver viewTreeObserver = decorView.getViewTreeObserver();
viewTreeObserver.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
final ArrayList<View> outViews = new ArrayList<>();
decorView.findViewsWithText(outViews, description,
View.FIND_VIEWS_WITH_CONTENT_DESCRIPTION);
if (outViews.isEmpty())
return;
ActionMenuItemView overflow = (ActionMenuItemView)outViews.get(0);
overflow.getCompoundDrawables()[0].setColorFilter(colorFilter);
removeOnGlobalLayoutListener(decorView,this);
}
});
}
Run Code Online (Sandbox Code Playgroud)对于溢出菜单的项目文本:请看此链接
| 归档时间: |
|
| 查看次数: |
3825 次 |
| 最近记录: |