android:textColor不再适用于棉花糖

时间:2016-03-20 16:53:32

标签: android android-styles android-6.0-marshmallow cyanogenmod

我编写的应用程序依赖于资源中定义的颜色。有些是直接在布局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);

3 个答案:

答案 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)上面临同样的问题。原因是启用了设置/辅助功能/高对比度文本(实验)。

当我禁用它时,它按预期再次正常工作。