web-dev-qa-db-fra.com

Comment définir la disposition et la taille du texte sur DP dans le programme?

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?

36
RobGThai

Résolu ici .

Extrait:

DisplayMetrics metrics = getContext().getResources().getDisplayMetrics();
float dp = 20f;
float fpixels = metrics.density * dp;
int pixels = (int) (fpixels + 0.5f);
48
sven

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.

84
Santosh

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() et getDimensionPixelSize() 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));

<dimen name="edtxt_text_size">10dp</dimen> est défini dans votre fichier dimens.xml par exemple.

12
Julian Horst