Personnalisé attr obtenir la couleur renvoie des valeurs non valides
J'ai un affichage personnalisé dans lequel je veux mettre de la couleur d'un textview.
J'ai
attrs.xml
<declare-styleable name="PropertyView">
<attr name="propertyTitle" format="string" localization="suggested" />
<attr name="showTitle" format="boolean" />
<attr name="propertyTextColor" format="color" />
<attr name="propertyTextSize" format="dimension" />
</declare-styleable>
Je l'ai mis dans le fichier de layout
<com.something.views.PropertyView
android:id="@+id/dwf_rAwayTeamTimePenaltyInput"
style="@style/mw"
propertyview:propertyTextSize="16sp"
propertyview:propertyTitle="@string/AwayTeam"
propertyview:showTitle="true"
propertyview:propertyTextColor="@color/textLight" />
Et dans mon code je l'ai mis
TypedArray a = context.getTheme().obtainStyledAttributes(attrs, R.styleable.PropertyView, 0, 0);
showTitle = a.getBoolean(R.styleable.PropertyView_showTitle, false);
String title = a.getString(R.styleable.PropertyView_propertyTitle);
float textSize = a.getDimension(R.styleable.PropertyView_propertyTextSize, -1);
int color = a.getColor(R.styleable.PropertyView_propertyTextColor, -1);
textSize = textSize / getResources().getDisplayMetrics().scaledDensity;
if(BuildConfig.DEBUG) Log.e(getClass().getName(), "Color set to: " + color);
setShowTitle(showTitle);
setTitle(title);
if(textSize >= 0) mTitleTextView.setTextSize(TypedValue.COMPLEX_UNIT_SP, textSize);
if(color != -1) mTitleTextView.setTextColor(color);
a.recycle();
Mais la couleur retourne -1.
J'ai aussi essayé de mettre de la couleur à #000
Lorsque je fais cela, j'obtiens une valeur de -16777216
J'ai aussi essayé un.getInteger et un.getInt
Quelqu'un d'expérience avec ce problème ou des suggestions?
Solution, merci à Alex Fu
getColor ne peut pas gérer les références
Il travaille maintenant avec les
ColorStateList color = a.getColorStateList(R.styleable.PropertyView_propertyTextColor);
mTitleTextView.setTextColor(color);
Vous devez vous connecter pour publier un commentaire.
Vous utilisez une référence à une couleur dans votre exemple, cependant, selon votre attrs.xml fichier, propriété doit être d'un type de couleur, pas une référence. C'est probablement la raison pour laquelle lorsque vous avez utilisé un hexagone code couleur, il a travaillé, mais à l'aide d'une référence renvoyée -1.
Si vous changez le format d'une référence, vous devez également modifier la méthode de récupérer depuis
a.getColor()
àa.getColorStateList()
.a.getColor()
méthode? Vous devez essayer d'utiliser lea.getColorStateList()
à la place.getColorStateList
peut comprendre à la fois des couleurs et des références.La est une sorte de bug avec
attrs
.Le suivant fonctionne parfaitement.
attrs.xml
YourView.java
Utilisation