SetWidth (int pixels) utilise-t-il comme unité un pixel indépendant du périphérique ou un pixel physique? Par exemple, setWidth (100) définit-il la largeur d'une vue sur 100 creux ou 100 px?
Merci.
SetWidth (int pixels) utilise-t-il comme unité un pixel indépendant du périphérique ou un pixel physique? Par exemple, setWidth (100) définit-il la largeur d'une vue sur 100 creux ou 100 px?
Merci.
Réponses:
Il utilise des pixels, mais je suis sûr que vous vous demandez comment utiliser les creux à la place. La réponse est là TypedValue.applyDimension()
. Voici un exemple de conversion de creux en px dans le code:
// Converts 14 dip into its equivalent px
Resources r = getResources();
int px = Math.round(TypedValue.applyDimension(
TypedValue.COMPLEX_UNIT_DIP, 14,r.getDisplayMetrics()));
La bonne façon d'obtenir un nombre constant de DIP dans le code est de créer un fichier XML de ressources contenant des valeurs de dp un peu comme:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<dimen name="image_width">100dp</dimen>
<dimen name="image_height">75dp</dimen>
</resources>
Puis référez-vous à la ressource dans votre code comme ceci:
float width = getResources().getDimension(R.dimen.image_width));
float height = getResources().getDimension(R.dimen.image_height));
Le flottant que vous avez renvoyé sera mis à l'échelle en fonction de la densité de pixels de l'appareil et vous n'avez donc pas besoin de continuer à répliquer une méthode de conversion dans toute votre application.
Méthode setWidth (100), définissez 100 px comme largeur (pas en dp) .Vous pouvez donc rencontrer des problèmes de largeur variable sur différents téléphones Android.Utilisez donc la mesure en dp au lieu de pixels.Utilisez le code ci-dessous pour obtenir une mesure en dp de la largeur de l'échantillon = 300px et hauteur = 400px.
int width = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 300, getResources().getDisplayMetrics());
int Height = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 400, getResources().getDisplayMetrics());
float dps = 100;
float pxs = dps * getResources().getDisplayMetrics().density;
Pixels bien sûr, la méthode demande des pixels comme paramètre.
Sur la base des réponses ci-dessus qui fonctionnent bien pour moi, je génère des méthodes d'aide , il suffit de les ajouter dans vos utils pour les utiliser dans tout le projet.
// value in DP
public static int getValueInDP(Context context, int value){
return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, value, context.getResources().getDisplayMetrics());
}
public static float getValueInDP(Context context, float value){
return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, value, context.getResources().getDisplayMetrics());
}
// value in PX
public static int getValueInPixel(Context context, int value){
return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_PX, value, context.getResources().getDisplayMetrics());
}
public static float getValueInPixel(Context context, float value){
return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_PX, value, context.getResources().getDisplayMetrics());
}