当它是一个引用(主题)时,以编程方式获取颜色值

考虑一下:

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)