SetWidth (int pixels) utilise-t-il des pixels indépendants du périphérique ou des pixels physiques comme unité? Par exemple, setWidth (100) définit-il la largeur d'une vue sur 100 pips ou 100 px?
Merci.
Il utilise des pixels, mais je suis sûr que vous vous demandez comment utiliser plutôt les trempettes. La réponse est dans TypedValue.applyDimension()
. Voici un exemple de conversion de dips 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 méthode correcte pour obtenir un nombre constant de DIP dans le code consiste à créer un fichier XML de ressources contenant les valeurs 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>
Ensuite, référez-vous à la ressource dans votre code comme suit:
float width = getResources().getDimension(R.dimen.image_width));
float height = getResources().getDimension(R.dimen.image_height));
Le float que vous avez renvoyé sera mis à l'échelle en fonction de la densité de pixels du périphérique. Vous n'avez donc pas besoin de répliquer continuellement une méthode de conversion dans votre application.
Méthode setWidth (100), définissez 100 px en tant que largeur (pas en dp) .Pour que vous puissiez faire face à des problèmes de largeur variable sur différents Android téléphones.Pour utiliser la mesure en dp au lieu de pixels.Utilisez ce qui suit Code pour obtenir la mesure en dp de l'échantillon width = 300px et height = 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 en paramètre.
Sur la base des réponses ci-dessus, ce qui me convient le mieux, j’en génère des méthodes d’aide, ajoutez-les simplement dans vos utilitaires pour les utiliser dans l’ensemble du 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());
}