我想从我的代码中找到布局的背景颜色。有没有办法找到它?像linearLayout.getBackgroundColor()
什么?
问问题
76022 次
5 回答
144
如果您的背景是纯色,这只能在 API 11+ 中完成。
int color = Color.TRANSPARENT;
Drawable background = view.getBackground();
if (background instanceof ColorDrawable)
color = ((ColorDrawable) background).getColor();
于 2013-02-08T18:57:41.247 回答
16
要获取布局的背景颜色:
LinearLayout lay = (LinearLayout) findViewById(R.id.lay1);
ColorDrawable viewColor = (ColorDrawable) lay.getBackground();
int colorId = viewColor.getColor();
如果它是RelativeLayout,那么只需找到它的id并使用那里的对象而不是LinearLayout。
于 2015-08-17T07:27:46.530 回答
13
ColorDrawable.getColor() 仅适用于 API 级别 11 以上,因此您可以使用此代码从 API 级别 1 支持它。使用 API 级别 11 以下的反射。
public static int getBackgroundColor(View view) {
Drawable drawable = view.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;
}
于 2015-07-30T02:24:37.020 回答
9
简短而简单的方法:
int color = ((ColorDrawable)view.getBackground()).getColor();
于 2018-03-02T13:03:14.140 回答
4
对于 kotlin 粉丝
fun View.getBackgroundColor() = (background as? ColorDrawable?)?.color ?: Color.TRANSPARENT
于 2020-03-18T01:46:28.940 回答