La fonction Android View.setPadding(int left, int top, int right, int bottom)
n'accepte que les valeurs en px mais je souhaite définir un remplissage dans dp. Y a-t-il un moyen de contourner cela?
Réponses:
Directement 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);
getResources()
c'est une fonction héritée par une activité, mais j'essaie d'utiliser ces lignes dans un adaptateur de listview personnalisé. Puis-je faire cela si je ne peux pas appeler getResources()
?
Si vous définissez la dimension (en dp ou autre) dans un fichier XML (ce qui est mieux de toute façon, du moins dans la plupart des cas), vous pouvez en obtenir la valeur en pixels en utilisant ce code:
context.getResources().getDimensionPixelSize(R.dimen.your_dimension_name)
Il existe un meilleur moyen 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);
Vous pouvez calculer les pixels pour une valeur PPP spécifique: http://forum.xda-developers.com/showpost.php?p=6284958&postcount=31
J'ai le même problème. La seule solution que j'ai trouvée (cela ne vous aidera pas vraiment :)) est de le définir dans le fichier Xml.
Si vous pouvez obtenir la densité à partir du code, vous pouvez utiliser la conversion: "La conversion des unités de creux en pixels d'écran est simple: pixels = creux * (densité / 160)." (à partir de http://developer.android.com/guide/practices/screens_support.html )
Edit: vous pouvez obtenir la densité de l'écran: http://developer.android.com/reference/android/util/DisplayMetrics.html#densityDpi