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