103 votes

View.setPadding accepte uniquement en px, y a-t-il quand même à setPadding en dp ?

Fonction Android View.setPadding(int left, int top, int right, int bottom) n'accepte que les valeurs en px mais je veux définir le remplissage en dp. Il y a un moyen de contourner ça ?

199voto

Labeeb P Points 12645

Direct au code

int padding_in_dp = 6;  // 6 dps
final float scale = getResources().getDisplayMetrics().density;
int padding_in_px = (int) (padding_in_dp * scale + 0.5f);

104voto

Michael Sparmann Points 131

Si vous définissez la dimension (en dp ou autre) dans un fichier XML (ce qui est mieux de toute façon, au moins dans la plupart des cas), vous pouvez obtenir la valeur de pixel de celui-ci en utilisant ce code :

context.getResources().getDimensionPixelSize(R.dimen.your_dimension_name)

3voto

wapn Points 18

Il y a une meilleure façon de convertir la valeur en dp par programme :

int value = 200;
int dpValue = (int) TypedValue.applyDimension(
            TypedValue.COMPLEX_UNIT_DIP,
            value,        
            context.getResources().getDisplayMetrics());

Appliquez ensuite dpValue à votre méthode, par exemple : setPadding(dpValue,dpValue,dpValue,dpValue);

1voto

user3579786 Points 1

Voici la version de Kotlin basée sur la réponse acceptée :

fun dpToPx(dp: Int): Int {
    val scale = resources.displayMetrics.density
    return (dp * scale + 0.5f).toInt()
}

0voto

Moss Points 3813

Vous pouvez calculer les pixels pour une valeur DPI spécifique : http://forum.xda-developers.com/showpost.php?p=6284958&postcount=31

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X