コードからレイアウトの背景色を見つけたいです。それを見つける方法はありますか?みたいなlinearLayout.getBackgroundColor()
?
質問する
76022 次
5 に答える
144
これは、背景が単色の場合にのみAPI11以降で実行できます。
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 に答える