Fondamentalement, je l'ai dans XML, mais je dois le recréer dans un code. Comment fait-on ça?
<EditText
Android:layout_width="140dp"
Android:layout_height="20dp"
Android:background="@drawable/input_bg01"
Android:textSize="10dp"
Android:gravity="center"
Android:text="111-222-333 FOOO" />
Je peux l'utiliser pour définir la taille du texte, mais qu'en est-il de la largeur et de la hauteur de la mise en page?
edTxt.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 10);
Existe-t-il un moyen de dire au code d'utiliser l'unité DP au lieu du pixel? Ou une fonction de conversion pour convertir DP en pixel?
Résolu ici .
Extrait:
DisplayMetrics metrics = getContext().getResources().getDisplayMetrics();
float dp = 20f;
float fpixels = metrics.density * dp;
int pixels = (int) (fpixels + 0.5f);
Vous pouvez utiliser:
float pixels = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 10, getResources().getDisplayMetrics());
Maintenant, la valeur de pixels
est équivalente à 10dp
à la densité d'écran actuelle de l'appareil.
TypedValue contient d'autres méthodes similaires qui aident à la conversion.
Juste pour être complet: une autre solution (que je préfère) pour la question est donnée ici
setTextSize(float)
attend une valeur de pixel mise à l'échelle. Ainsi,setTextSize(10)
vous donnerait le résultat souhaité. Cependant,getDimension()
etgetDimensionPixelSize()
renvoient la taille en unités de pixels.
Donc, pour votre exemple, ce serait
setTextSize(TypedValue.COMPLEX_UNIT_PX, getResources().getDimensionPixelSize(R.dimen.edTxt_text_size));
où <dimen name="edtxt_text_size">10dp</dimen>
est défini dans votre fichier dimens.xml par exemple.