新版Android 5.0中的TextView.getTextColor(Context context, TypedArray typedArray, int defStyle)方法去哪了?

3

在将sdk更新到Android 5.0之后,方法TextView.getTextColor(Context context, TypedArray typedArray, int defStyle)消失了。
我在自定义TextView中使用了这个方法(用于从xml定义的int colorId)。
那么如何从xml确定int color id呢?


2
对于任何好奇的人,这种方法被删除是因为android.R.styleable既不是公共的也不是稳定的。因此,将TypedArray传递到任何框架视图中都是不安全的,因为数组索引将无法与内部使用的android.R.styleable数组匹配。这将破坏您的应用程序,导致难以调试的问题,因此我们删除了所有这些方法。 - alanv
2个回答

2

以下是获取TextView颜色的示例代码:

TextView tv = (TextView) findViewById(R.id.yourComponentId);
int tv_color = tv.getTextColors().getDefaultColor();

或者您也可以像这样获取普通文本的颜色:
TextView tv = (TextView) findViewById(R.id.yourComponentId);
int tv_color = tv.getCurrentTextColor();

如果使用第一个示例,您还可以使用以下方式获取各种状态的颜色:

TextView tv = (TextView) findViewById(R.id.yourComponentId);
ColorStateList colorStateList = tv.getTextColors();
int tv_color colorStateList.getColorForState(states, failColor);

希望这可以帮到你。
参考来源:getColorForState

而 DefaultColor 是什么?如果开发者输入了具体的 int 颜色值,我该怎么处理? - xoxol_89
@xoxol_89 它返回的是像Color类中定义的具体整数颜色。 - sam
@xoxol_89 TextView类的getCurrentTextColor方法返回相同的值。 - sam

1

你能给我提供关于TextView的 https://developer.android.com/sdk/api_diff/21/changes.html 具体参考吗? - xoxol_89
@xoxol_89 https://developer.android.com/sdk/api_diff/21/changes/android.widget.TextView.html - sam
但是如何从ColorStateList中获取颜色资源ID? - xoxol_89

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接