Est-ce que setWidth (pixels int) ou utiliser dip px?
-
18-09-2019 - |
Question
ne setLargeur (pixels int), utiliser un pixel ou pixel indépendant physique comme unité? Par exemple, le fait setLargeur (100) régler la largeur de vue de 100 trempettes ou 100 pxs?
Merci.
La solution
Il utilise des pixels, mais je suis sûr que vous vous demandez comment utiliser les trempettes à la place. La réponse est dans TypedValue.applyDimension()
. Voici un exemple de la façon de convertir les trempettes à 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()));
Autres conseils
La bonne façon d'obtenir un nombre constant d'immersions dans le code est de créer un fichier XML contenant des ressources dp valeurs 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, reportez-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 flotteur vous retourné sera réduite en conséquence pour la densité de pixels de l'appareil et donc vous n'avez pas besoin de garder la réplication d'une méthode de conversion tout au long de votre application.
Méthode setLargeur (100), situé à 100 px que la largeur (pas dp) .Donc vous pouvez faire face à des problèmes de largeur variables sur les différentes mesures d'utilisation android phones.So dans dp au lieu de pixels.Use le code ci-dessous pour obtenir la mesure en dp de largeur d'échantillon = 300 x et la 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 entendu, le procédé demande pour des pixels en tant que paramètre.
Sur la base des réponses ci-dessus qui fonctionne très bien pour moi, je produis des méthodes d'aide , il suffit de les ajouter dans vos utils pour les utiliser dans le projet entier.
// 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());
}