如何从代码中检索和使用样式属性?

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>

我想用这个主题的colorPrimaryrecyclerView中的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);