当它是一个引用(主题)时,以编程方式获取颜色值
考虑一下:
styles.xml
<style name="BlueTheme" parent="@android:style/Theme.Black.NoTitleBar"> <item name="theme_color">@color/theme_color_blue</item> </style>
attrs.xml
<attr name="theme_color" format="reference" />
color.xml
<color name="theme_color_blue">#ff0071d3</color>
所以主题颜色是由主题引用的。 我怎样才能以编程方式获得theme_color(引用)? 通常我会使用getResources().getColor()
但在这种情况下,因为它被引用!
这应该做的工作:
TypedValue typedValue = new TypedValue(); Theme theme = context.getTheme(); theme.resolveAttribute(R.attr.theme_color, typedValue, true); @ColorInt int color = typedValue.data;
在调用此代码之前,请确保将主题应用于您的活动。 可以使用:
android:theme="@style/Theme.BlueTheme"
在清单或调用中(在调用setContentView(int)
):
setTheme(R.style.Theme_BlueTheme)
在onCreate()
。
我已经用你的价值testing了它,它完美的工作。
这对我工作:
int[] attrs = {R.attr.my_attribute}; TypedArray ta = context.obtainStyledAttributes(attrs); int color = ta.getResourceId(0, android.R.color.black); ta.recycle();
如果你想得到这个hexstring:
Integer.toHexString(color)