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.

Était-ce utile?

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;

Source (@Romain Guy)

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());
    }
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top