Comment lire personnalisé attribut de dimension à partir du code java
J'ai fait mon composant personnalisé juste mettre quelques TextViews ensemble. Maintenant, je veux être en mesure d'init de mon contrôle personnalisé directement à partir du code, en passant la taille du texte indépendamment pour chaque de de TV
Mes attributs définition:
<resources>
<declare-styleable name="BasicGauge">
<attr name="valueTextSize" format="dimension" />
<attr name="titleTextSize" format="dimension" />
<attr name="unitsTextSize" format="dimension" />
</declare-styleable>
</resources>
De l'échantillon de l'initialisation de la composante:
<pl.com.digita.BikeComputerUi.customviews.BasicGauge
android:id="@+id/basicGauge1"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:padding="10dp"
valueTextSize="40sp">
</pl.com.digita.BikeComputerUi.customviews.BasicGauge>
Comment j'essaie de lire les attributs du composant constructeur:
final int N = typedArray.getIndexCount();
for (int i = 0; i < N; i++) {
int attribute = typedArray.getIndex(i);
switch (attribute) {
case R.styleable.BasicGauge_valueTextSize:
valueTextSize = typedArray.getString(attribute);
break;
case R.styleable.BasicGauge_titleTextSize:
titleTextSize = typedArray.getString(attribute);
break;
case R.styleable.BasicGauge_unitsTextSize:
unitsTextSize = typedArray.getString(attribute);
break;
}
typedArray.recycle();
}
Problème:
Après la création de l'ensemble de mes valeurs sont toujours null. 40sp est exactement ma valeur souhaitée.
Vous devez vous connecter pour publier un commentaire.
Quelques choses à dire :
Après, ce n'est pas une très bonne idée d'obtenir une chaîne de caractères, android offre plus puissant solution pour traiter dimensions :
puis il y a quelques petites subtilités :
paint.setTextSize(unitTextSize):
textView.setTextSize(TypedValue.COMPLEX_UNIT_PX, unitTextSize);
La différence vient de ce qui est appelé "raw pixels" (non mis à l'échelle en fonction de la densité, la brute) et "l'échelle de pixels" (à l'opposé).
Pour un peu plus de contexte pour la accepté de répondre:
attrs.xml
Définir l'attribut personnalisé avec le
dimension
format.activity.xml
De référence de vos attributs avec
xmlns:app=...
et les mettre dans votre xml avecapp:...
.CustomView.java
Obtenir les valeurs de la TypedArray à l'aide de
getDimensionPixelSize
. Au sein de votre vue personnalisée juste travailler avec des pixels. Voir cette réponse si vous avez besoin de les convertir à une autre dimension.getDimensionPixelSize()
?0
. Vous avez raison, cependant. Il serait préférable de choisir un plus raisonnable par défaut. N'oubliez pas de faire les sp px de conversion lors de l'exécution sur quelle que soit la valeur par défaut que vous choisissez.