Android 更新到支持库23.2.0后,棒棒糖前设备中的后退箭头和溢出图标颜色错误

Android 更新到支持库23.2.0后,棒棒糖前设备中的后退箭头和溢出图标颜色错误,android,android-support-library,androiddesignsupport,Android,Android Support Library,Androiddesignsupport,在pre-Lollipop设备上,操作栏上的溢出菜单图标和后退按钮在升级到支持库23.2.0后变为黑色。它们在升级之前是白色的(这是正确的颜色) 正确的颜色是: 升级后,棒棒糖前的设备会出现错误的颜色,如溢出菜单图标所示: sytle.xml(v21/Lollipop之前)中的主题: @颜色/应用程序颜色 @颜色/应用程序\u主要\u深色 @颜色/应用程序\u强调\u颜色 @颜色/应用程序背景 @样式/自定义\搜索\视图\样式 假的 真的 ... ... 我已经看过了,但没有解决问题

在pre-Lollipop设备上,操作栏上的溢出菜单图标和后退按钮在升级到支持库23.2.0后变为黑色。它们在升级之前是白色的(这是正确的颜色)

正确的颜色是:

升级后,棒棒糖前的设备会出现错误的颜色,如溢出菜单图标所示:

sytle.xml(v21/Lollipop之前)中的主题:


@颜色/应用程序颜色
@颜色/应用程序\u主要\u深色
@颜色/应用程序\u强调\u颜色
@颜色/应用程序背景
@样式/自定义\搜索\视图\样式
假的
真的
... ... 
我已经看过了,但没有解决问题

更新:另请参阅此Google bug报告:

我可以修复

我发现AppCompat主题正在为溢出按钮使用以下资源:
abc\u ic\u menu\u overflow\u material.xml

此资源的内容是:

<vector xmlns:android="http://schemas.android.com/apk/res/android"
        android:width="24dp"
        android:height="24dp"
        android:viewportWidth="24.0"
        android:viewportHeight="24.0"
        android:tint="?attr/colorControlNormal">
    ...
</vector>
Gradle 1.5(我正在使用这个..它有效):

确定主题

此步骤可能被忽略。一些基本主题已将
colorControlNormal
设置为白色(例如
AppCompat.Dark.ActionBar

然而,在我的例子中,所有的按钮颜色仍然是黑色,我必须将
colorControlNormal
添加到我的主题中,并用白色覆盖它

<style name="AppTheme" parent="Theme.AppCompat.NoActionBar">
    <item name="colorControlNormal">@color/white</item>
</styel>

@颜色/白色
我希望这能帮助你


这就是我解决问题的方法。

将支持库更改为23.2.0时,我遇到了这个问题。返回箭头和溢出图标变为黑色

protected void changeBackArrow() {
    final Drawable upArrow = ContextCompat.getDrawable(this, R.drawable.abc_ic_ab_back_material);
    upArrow.setColorFilter(ContextCompat.getColor(this, R.color.textColorPrimary), PorterDuff.Mode.SRC_ATOP);

    getSupportActionBar().setHomeAsUpIndicator(upArrow);
}
从支持23.1开始,工具栏现在有getOverflowIcon()和setOverflowIcon()方法


只需更新到Support Library 23.2.1,即可解决此问题

对于AppCompat用户,使用AppCompat不再需要23.2博客文章()中描述的启用支持向量可绘制项的标志

我编写了一个helper(我使用一个带有有用函数的静态helper类)函数,可以在活动的onCreate()开始时调用该函数:

    public static void setWhiteBackArrow(ActionBar actionbar, Context context){
    //needed due to bug in Android compile version 23
    // https://code.google.com/p/android/issues/detail?id=201918
    if (actionbar != null) {
        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
            final Drawable upArrow = ContextCompat.getDrawable(context, android.support.v7.appcompat.R.drawable.abc_ic_ab_back_material);
            upArrow.setColorFilter(ContextCompat.getColor(context, R.color.white), PorterDuff.Mode.SRC_ATOP);
            //ActionBar aBar = context.getSupportActionBar();
            actionbar.setHomeAsUpIndicator(upArrow);
        }
    }    

我写这个答案,因为被接受的答案对我来说并不适用(即使它是正确的)。但我用另一种方法解决了它,所以我在这里分享:

首先,我没有向gradle文件添加任何内容。我正在使用支持库v23.4.0,因为它是撰写本文时的最新版本

对我来说,有效的方法是硬编码着色颜色或路径颜色,而不是使用颜色资源引用。例如,使用
android:fillColor=“#fff”
而不是
android:fillColor=“@android:color/white”



观察上述代码片段中的色调和路径颜色。早些时候,我将颜色指定为“@color/someColor”,但它显示了一个警告,即它仅适用于v21及以上版本,而实际上在v21以下版本不起作用。所以我把它改成了硬编码的值。同样,这是一个简单的解决方法/黑客,可能不是一个正确的解决方案。

我也遇到了这个问题。。它只发生在preLL中,在v23.1.1中工作正常,因为back arrow突然变为黑色:'(谢谢,这对我很有用!事实上,我只需要添加Gradle配置(我也使用1.5),甚至不需要添加ColorControlNormal.work而不使用“ColorControlNormal”:)ty->upI在23.2.1上,但仍然存在错误警报的问题,只是发现在Android Studio生成的build.gradle文件中,向导默认使用23.2.0。。我试试这个谢谢!
<style name="AppTheme" parent="Theme.AppCompat.NoActionBar">
    <item name="colorControlNormal">@color/white</item>
</styel>
protected void changeBackArrow() {
    final Drawable upArrow = ContextCompat.getDrawable(this, R.drawable.abc_ic_ab_back_material);
    upArrow.setColorFilter(ContextCompat.getColor(this, R.color.textColorPrimary), PorterDuff.Mode.SRC_ATOP);

    getSupportActionBar().setHomeAsUpIndicator(upArrow);
}
protected void changeOverflowMenu() {
    final Drawable overflowIcon = getToolbar().getOverflowIcon();
    overflowIcon.setColorFilter(ContextCompat.getColor(this, R.color.colorWhite), PorterDuff.Mode.SRC_ATOP);

    getToolbar().setOverflowIcon(overflowIcon);
}
    public static void setWhiteBackArrow(ActionBar actionbar, Context context){
    //needed due to bug in Android compile version 23
    // https://code.google.com/p/android/issues/detail?id=201918
    if (actionbar != null) {
        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
            final Drawable upArrow = ContextCompat.getDrawable(context, android.support.v7.appcompat.R.drawable.abc_ic_ab_back_material);
            upArrow.setColorFilter(ContextCompat.getColor(context, R.color.white), PorterDuff.Mode.SRC_ATOP);
            //ActionBar aBar = context.getSupportActionBar();
            actionbar.setHomeAsUpIndicator(upArrow);
        }
    }    
Helper.setWhiteBackArrow(getSupportActionBar(), this);
<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:width="24dp"
    android:height="24dp"
    android:tint="#fff"
    android:viewportHeight="24"
    android:viewportWidth="24">
    <path
        android:fillColor="#fff"
        android:pathData="M9.5,3A6.5,6.5 0 0,1 16,9.5C16,11.11 15.41,12.59 14.44,13.73L14.71,14H15.5L20.5,19L19,20.5L14,15.5V14.71L13.73,14.44C12.59,15.41 11.11,16 9.5,16A6.5,6.5 0 0,1 3,9.5A6.5,6.5 0 0,1 9.5,3M9.5,5C7,5 5,7 5,9.5C5,12 7,14 9.5,14C12,14 14,12 14,9.5C14,7 12,5 9.5,5Z" />
</vector>