web-dev-qa-db-fra.com

SetWidth (int pixels) utilise-t-il dip ou px?

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.

93
user256239

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()));
217
Daniel Lew

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.

24
SDJMcHattie

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());
7
Nidhin
float dps = 100;
float pxs = dps * getResources().getDisplayMetrics().density;

Source (@Romain Guy)

4
pomber

Pixels bien sûr, la méthode demande des pixels en paramètre.

0
Josnidhin

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());
    }
0
Abhishek Garg