2016-07-09 1 views
0

J'ai du mal à faire les choses correctement.Conversion de dp en pixels pour la prise en charge de plusieurs écrans

Fondamentalement, je crée un ImageView et lui applique un LayoutParameter.

LayoutParams lp = new LayoutParams(width, height); 
lp.gravity = Gravity.CENTER; 

Je sais que width et height paramètres reçoivent un nombre de pixels, donc je suis les transmettre en DP et la convertir en pixels absolus en utilisant:

public int convertToPixels(float dpSize){ 
    final float density = getResources().getDisplayMetrics().density; 
    return ((int) (dpSize * density + 0.5f)); 
} 

En ce que je sais, cela devrait faire un drawable remplir exactement la même zone dans différents écrans, non? Malheureusement, cela ne se produit pas du tout.

Y at-il un problème avec ces méthodes que j'utilise?

Ces deux émulateurs ci-dessous ont la même image et la même quantité de DP. L'émulateur de gauche a une densité de 1,0 et le bon est de 2,0. Pourquoi est-ce que ça ressemble encore à si différent? Ne pas undertand ..

enter image description here

Répondre

1

Utilisation:

Convert public class {

public static float convertDpToPixel(float dp){ 
     DisplayMetrics metrics = Resources.getSystem().getDisplayMetrics(); 
     float px = dp * (metrics.densityDpi/160f); 
     return Math.round(px); 
     } 

}

il suffit d'utiliser d'une manière statique:

float requiredPixel = Convert.convertDpToPixel(16.0); 

Pour plus d'informations: https://developer.android.com/guide/practices/screens_support.html

+0

Saini, jetez un oeil à mon édition .. pourquoi il ne semble pas bon même avec le même montant de DP? – AndroidDev

+0

Mon code fonctionne-t-il pour vous? – Saini

+0

il est sûr que le calcul est correct mais les images sont encore différentes en termes de taille – AndroidDev