Como recuperar e usar um atributo de estilo do código?

Oct 14 2020

Eu defini um tema no style.xmlarquivo.

    <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>

Quero usar colorPrimaryeste tema para um textViewem a recyclerView. Eu tentei isso:

int[] attrs = {android.R.attr.colorPrimary};
TypedArray typedArray = mContext.obtainStyledAttributes(R.style.ThemePurple, attrs);
holder.titleView.setTextColor(typedArray.getColor(0, Color.BLACK));
typedArray.recycle();

Mas isto não está funcionando..

Respostas

3 snachmsm Oct 14 2020 at 11:44

não android.R.attr.colorPrimary, mas apenasR.attr.colorPrimary

android prefixo significa que você deseja obter um valor embutido, por exemplo android:colorPrimary

você está usando compat lib (provavelmente AndroidX), que fornece atributos mais novos para versões mais antigas do sistema, então esses parâmetros são na verdade "personalizados", sem android:prefixo

2 Yeldar.N Oct 14 2020 at 11:57

Para Kotlin :

val typedValue = TypedValue()
context.theme.resolveAttribute(android.R.attr.colorPrimary, typedValue, true)
holder.titleView.setTextColor(typedValue.data)

Para Java:

TypedValue typedValue = new TypedValue();
context.getTheme().resolveAttribute(android.R.attr.colorPrimary, typedValue, true);
holder.titleView.setTextColor(typedValue.data);