我编写的应用程序依赖于资源中定义的颜色。有些是直接在布局XML文件中设置的,有些是在代码中设置的。例子:
res/values/styles.xml
中的颜色定义:
<color name="orvGyro">#33B5E5</color>
布局:
<TextView
android:id="@+id/textView3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/dotSpace"
android:textAppearance="?android:attr/textAppearanceSmall"
android:textColor="@color/orvGyro" />
代码中的颜色:
accStatus.setTextColor(getResources().getColor(R.color.somecolor));
该应用程序针对API 17.直到Lollipop,它运行完美,显示正确的颜色。迁移到Marshmallow(Cyanogenmod 13)后,所有这些颜色显示为橙色。其他颜色(在Java代码中而不是在资源中定义)似乎正确显示。
我已尝试将目标API更改为23并为API 21+添加样式,但无济于事。
这里有什么问题?这是CyanogenMod13中的一个错误,还是我做错了什么?
编辑:似乎不是从资源中获取颜色。如下所示对颜色进行硬编码也会给出橙色文本:
<TextView
android:id="@+id/textView9"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/dotSpace"
android:textAppearance="?android:attr/textAppearanceSmall"
android:textColor="#669900" />
编辑2:刚刚遇到Android M Developer Preview - TextView android:textColor being ignored。这可以解释我正在经历的行为吗?
编辑3:当我动态生成内容而不是使用布局时,颜色会正确显示。例如:
TextView newType = new TextView(rilLteCells.getContext());
newType.setLayoutParams(new TableRow.LayoutParams(0, LayoutParams.WRAP_CONTENT, 2));
newType.setTextAppearance(rilLteCells.getContext(), android.R.style.TextAppearance_Medium);
newType.setTextColor(rilLteCells.getContext().getResources().getColor(getColorFromGeneration(cell.getGeneration())));
newType.setText(rilLteCells.getContext().getResources().getString(R.string.smallDot));
row.addView(newType);
答案 0 :(得分:1)
使用ContextCompat类,它是辅助类,用于以向后兼容的方式访问API级别4之后引入的Context中的功能。
accStatus.setTextColor(ContextCompat.getColor(context, R.color.somecolor));
public static final int getColor (Context context, int id)
返回与特定资源ID相关联的颜色
答案 1 :(得分:1)
知道了。
无论我遇到什么问题,控件中显示的文本都是单个方块(U + 2b1b)。当我更改此文本时(例如,通过附加X),只有正方形将以橙色显示,而其余字符串具有所需的颜色。
将其更改为小方块(U + 25fc)固定的东西。其他一些特殊字符会给我其他颜色 - 显然某些字符固定在Marshmallow上的某些颜色上,在早期版本中它们的样式可以像任何其他文本一样。
答案 2 :(得分:0)
在我的索尼Xperia(Android 6.0 Marshmallow)上面临同样的问题。原因是启用了设置/辅助功能/高对比度文本(实验)。
当我禁用它时,它按预期再次正常工作。