如何獲得TextView的背景顏色?如何獲取TextView的背景顏色?
當我按下TextView時,我想根據使用中的背景顏色更改背景顏色。
TextView中沒有一個方法,如:
getBackgroundResource()
編輯: 我寧願讓背景色的渣油。
如何獲得TextView的背景顏色?如何獲取TextView的背景顏色?
當我按下TextView時,我想根據使用中的背景顏色更改背景顏色。
TextView中沒有一個方法,如:
getBackgroundResource()
編輯: 我寧願讓背景色的渣油。
答:
我們不能使用consts像color.red或color.white。
我們需要弄清楚它的
int intID = (ColorDrawable) holder.tvChoose.getBackground().getColor();
如何代表它和我們有顏色的假身份證
ColorDrawable.getColor()
將只與上述11 API級別上工作,所以你可以使用此代碼從開始就支持它。 我使用以下API級別反射11
public static int getBackgroundColor(TextView textView) {
Drawable drawable = textView.getBackground();
if (drawable instanceof ColorDrawable) {
ColorDrawable colorDrawable = (ColorDrawable) drawable;
if (Build.VERSION.SDK_INT >= 11) {
return colorDrawable.getColor();
}
try {
Field field = colorDrawable.getClass().getDeclaredField("mState");
field.setAccessible(true);
Object object = field.get(colorDrawable);
field = object.getClass().getDeclaredField("mUseColor");
field.setAccessible(true);
return field.getInt(object);
} catch (NoSuchFieldException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
return 0;
}
如果您正在使用AppCompat
使用這樣的:
ViewCompat.getBackgroundTintList(textView).getDefaultColor();
旁註:要小心,如果你投以ColorDrawable
,因爲它可以拋出一個ClassCastException: android.graphics.drawable.RippleDrawable cannot be cast to android.graphics.drawable.ColorDrawable
。
或者我通過互聯網尋找一點點,但它似乎沒有辦法從xml定義的顏色得到這樣的id。可能你應該改變你的應用程序並以編程方式管理背景顏色,也許在onClick事件中保留一些顏色變化。 – Rob013