Comment récupérer et utiliser un attribut de style à partir du code?

Oct 14 2020

J'ai défini un thème dans le style.xmlfichier.

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

Je veux utiliser le colorPrimaryde ce thème dans un textViewfichier recyclerView. J'ai essayé ceci:

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

Mais ça ne fonctionne pas..

Réponses

3 snachmsm Oct 14 2020 at 11:44

non android.R.attr.colorPrimary, mais justeR.attr.colorPrimary

android préfixe signifie que vous souhaitez obtenir une valeur intégrée, par exemple android:colorPrimary

vous utilisez compat lib (AndroidX probablement) qui fournit des attributs plus récents aux anciennes versions du système, donc ces paramètres sont en fait "personnalisés", sans android:préfixe

2 Yeldar.N Oct 14 2020 at 11:57

Pour Kotlin :

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

Pour Java:

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