如何从代码中检索和使用样式属性?
How to retrive and use a style attribute from code?
我在 style.xml
文件中定义了一个主题。
<style name="ThemePurple" parent="AppTheme.NoActionBar">
<item name="colorPrimary">@color/colorPurple</item>
<item name="colorPrimaryDark">@color/colorPurpleDark</item>
<item name="colorAccent">@color/colorPurpleAccent</item>
</style>
我想用这个主题的colorPrimary
到recyclerView
中的textView
。我试过这个:
int[] attrs = {android.R.attr.colorPrimary};
TypedArray typedArray = mContext.obtainStyledAttributes(R.style.ThemePurple, attrs);
holder.titleView.setTextColor(typedArray.getColor(0, Color.BLACK));
typedArray.recycle();
但这不起作用..
不是android.R.attr.colorPrimary
,只是R.attr.colorPrimary
android
前缀表示您想要获得 built-in 值,例如android:colorPrimary
您正在使用兼容库(可能是 AndroidX),它为旧系统版本提供更新的属性,因此这些参数实际上是“自定义”的,没有 android:
前缀
对于 Kotlin:
val typedValue = TypedValue()
context.theme.resolveAttribute(android.R.attr.colorPrimary, typedValue, true)
holder.titleView.setTextColor(typedValue.data)
对于Java:
TypedValue typedValue = new TypedValue();
context.getTheme().resolveAttribute(android.R.attr.colorPrimary, typedValue, true);
holder.titleView.setTextColor(typedValue.data);
我在 style.xml
文件中定义了一个主题。
<style name="ThemePurple" parent="AppTheme.NoActionBar">
<item name="colorPrimary">@color/colorPurple</item>
<item name="colorPrimaryDark">@color/colorPurpleDark</item>
<item name="colorAccent">@color/colorPurpleAccent</item>
</style>
我想用这个主题的colorPrimary
到recyclerView
中的textView
。我试过这个:
int[] attrs = {android.R.attr.colorPrimary};
TypedArray typedArray = mContext.obtainStyledAttributes(R.style.ThemePurple, attrs);
holder.titleView.setTextColor(typedArray.getColor(0, Color.BLACK));
typedArray.recycle();
但这不起作用..
不是android.R.attr.colorPrimary
,只是R.attr.colorPrimary
android
前缀表示您想要获得 built-in 值,例如android:colorPrimary
您正在使用兼容库(可能是 AndroidX),它为旧系统版本提供更新的属性,因此这些参数实际上是“自定义”的,没有 android:
前缀
对于 Kotlin:
val typedValue = TypedValue()
context.theme.resolveAttribute(android.R.attr.colorPrimary, typedValue, true)
holder.titleView.setTextColor(typedValue.data)
对于Java:
TypedValue typedValue = new TypedValue();
context.getTheme().resolveAttribute(android.R.attr.colorPrimary, typedValue, true);
holder.titleView.setTextColor(typedValue.data);