试图改变ActionBar homeAsUp按钮的颜色

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了试图改变ActionBar homeAsUp按钮的颜色相关的知识,希望对你有一定的参考价值。

我试图改变android操作栏上的homeAsUp按钮的颜色是不成功的。我需要在运行时这样做。这是我得到的:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.menu_register_one, menu);

    MenuItem homeItem = null;

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
        homeItem = menu.findItem(R.id.home);
    } else {
        homeItem = menu.findItem(R.id.up);
    }

    if (homeItem == null) {
        // I always wind up with a null homeItem
        Log.e(Constants.TAG, "null");
    } else {
        Drawable homeIcon = (Drawable) homeItem.getIcon();
        homeIcon.mutate().setColorFilter(Color.parseColor(sharedVisualElements.primaryFontColorHexString()), PorterDuff.Mode.SRC_IN);
        homeItem.setIcon(homeIcon);
    }

    // this part works just fine
    MenuItem nextItem = menu.findItem(R.id.next);
    Drawable newIcon = (Drawable)nextItem.getIcon();
    newIcon.mutate().setColorFilter(Color.parseColor(sharedVisualElements.primaryFontColorHexString()), PorterDuff.Mode.SRC_IN);
    nextItem.setIcon(newIcon);

    return true;
}

这总是随着homeItem处于空状态而结束。我的操作栏看起来像这样(两个箭头都应该是绿色且大小相同):

enter image description here

答案

试试这个

final Drawable upArrow = getResources().getDrawable(R.drawable.abc_ic_ab_back_mtrl_am_alpha);
upArrow.setColorFilter(getResources().getColor(R.color.grey), PorterDuff.Mode.SRC_ATOP);
getSupportActionBar().setHomeAsUpIndicator(upArrow)
另一答案

尝试将R.id.home更改为android.R.id.home

另一答案

这是我解决这个问题的方法。感谢Parth Bhayani,但他的解决方案使用了弃用的方法,但这不是:

Drawable upArrow = ResourcesCompat.getDrawable(getResources(), R.drawable.ic_arrow_back_white_48dp, null);

upArrow.mutate().setColorFilter(Color.parseColor(sharedVisualElements.primaryFon‌​tColorHexString()), PorterDuff.Mode.SRC_IN); 

getSupportActionBar().setHomeAsUpIndicator(upArrow);
另一答案

我知道这是旧的,但最好不使用可绘制的abc_ic_ab_back_mtrl_am_alpha常量,因为它们可以在不同的OS版本和不同的支持库中进行更改。我使用以下内容来获取homeasup按钮的drawable:

{
    Drawable drawable;
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
        drawable = getSupportDrawableFromAttrIndex(android.support.v7.appcompat.R.styleable.ActionBar_homeAsUpIndicator);
    } else {
        drawable = getDrawableFromAttr(android.R.attr.homeAsUpIndicator);
    }
    // apply the tint color here before setting to the actionBar
    actionBar.setHomeAsUpIndicator(drawable);
}

Drawable getSupportDrawableFromAttrIndex(int index) {
    TypedArray ta = getActivity().obtainStyledAttributes(null,
            android.support.v7.appcompat.R.styleable.ActionBar,
            android.support.v7.appcompat.R.attr.actionBarStyle,
            0);
    Drawable drawable = AppCompatResources.getDrawable(getActivity(), ta.getResourceId(index, 0));
    ta.recycle();
    return drawable;
}

protected Drawable getDrawableFromAttr(int attr) {
    int[] attrs = {attr};
    TypedArray ta = getActivity().obtainStyledAttributes(R.style.YOUR_APP_THEME, attrs);
    Drawable drawable = ta.getDrawable(0);
    ta.recycle();
    return drawable;
}

那么你可以应用色调。

以上是关于试图改变ActionBar homeAsUp按钮的颜色的主要内容,如果未能解决你的问题,请参考以下文章

Android-如何在ActionBar中实现“赞”按钮

Nativescript-vue原生iOS导航按钮在ActionBar上设置标题后消失

从android中的片段更改自定义ActionBar标题

[AndroidStudio]DrawerLayout布局结合HomeAsUp箭头动画效果最小系统

AndroidX 向上导航功能

带有导航选项卡的 ActionBar 随屏幕方向改变高度