83 votes

Support de différentes résolutions pour Android

Question modifiée :

Résolution mobile :
Je voudrais concevoir différents dpi d'écran comme les résolutions suivantes.
320x480,
480×800,
540x960,
720x1280 (Samsung S3),
1080x1920 (S4, Nexus5,Nexus 5x, Moto G4),
2560 x 1440 (Nexus 6, Nexus 6p, Samsung edge)

Résolution de la tablette :
480x800 (micromax) ,
600x1024 (samsung tab2),
800x1280 (nexus 7),
1200x1920 (nouveau nexus 7),
2048x1536 (nexus 9)

Je veux utiliser différentes tailles de police en fonction de la résolution d'affichage de l'appareil.

Q1) Quel est le best moyen de résoudre ce problème problem ?

Q2) Quelle est la meilleure option pour faire du codage ou du XML ?

Q3) Quel dossier dessinable représente quelle résolution de périphérique ?

Q4) Taille de l'icône du lanceur d'applications en fonction de la résolution ?

193voto

Bhavesh Jethani Points 949

Taille de l'icône du lanceur d'applications en pixels pour différentes résolutions

Résolution mobile

  • mipmap-mdpi (48X48)
  • mipmap-hdpi (72X72)
  • mipmap-xhdpi (96X96)
  • mipmap-xxhdpi (144X144)
  • mipmap-xxxhdpi (192X192)

Mises en page pour tablettes :

Utilisez les dossiers suivants si vous souhaitez avoir des mises en page spécifiques aux tablettes :

layout-large-mdpi   (1024x600)
layout-large-tvdpi  (800x1280)
layout-large-xhdpi  (1200x1920)
layout-xlarge-mdpi  (1280x800)
layout-xlarge-xhdpi (2560x1600)

Chemises à dessins :

  1. Mobile

    res/drawable        (default)
    res/drawable-ldpi/  (240x320 and nearer resolution)
    res/drawable-mdpi/  (320x480 and nearer resolution)
    res/drawable-hdpi/  (480x800, 540x960 and nearer resolution)
    res/drawable-xhdpi/  (720x1280 - Samsung S3, Micromax Canvas HD etc)
    res/drawable-xxhdpi/ (1080x1920 - Samsung S4, HTC one, Nexus 5, etc)
    res/drawable-xxxhdpi/ (1440X2560 - Nexus 6,Samsung S6edge).
  2. Résolution de la tablette : enter image description here

    Taille des polices :

NOTE : Essayez toujours d'utiliser le SP lorsque vous traitez avec textSize comme textsize=12sp

  1. Utiliser des modèles prédéfinis textAppearance :

    Il définit automatiquement la taille du texte en fonction de la densité du dispositif.

    <TextView android:textAppearance="?android:attr/textAppearanceSmall"/>
    <TextView android:textAppearance="?android:attr/textAppearanceMedium"/>
    <TextView android:textAppearance="?android:attr/textAppearanceLarge" />

    Exemple d'utilisation :

    <TextView
        style="@android:style/TextAppearance.Small"
        android:text="Sample Text - Small" />
    <TextView
        style="@android:style/TextAppearance.Medium"
        android:text="Sample Text  - Medium" />
    <TextView
        style="@android:style/TextAppearance.Large"
        android:text="Sample Text  - Large" />
  2. Utilice dimension.xml pour chaque appareil :

    De Google IO Pdf nous voyons la structure ci-dessous :

    1. Mobile :

      res/values/dimens.xml(default)
      res/values-ldpi/dimens.xml   (240x320 and nearer resolution)
      res/values-mdpi/dimens.xml   (320x480 and nearer resolution)
      res/values-hdpi/dimens.xml   (480x800, 540x960 and nearer resolution)
      res/values-xhdpi/dimens.xml  (720x1280 - Samsung S3, Micromax Canvas HD, etc)
      res/values-xxhdpi/dimens.xml (1080x1920 - Samsung S4, HTC one, etc)

      res/values-xxxhdpi/dimens.xml (1440X2560 - Nexus 6,Samsung S6edge).

    2. Tablette :

      Pour les tablettes, vous pouvez utiliser un dossier plus spécifique comme values-xlarge , values-large .

      res/values-large/dimens.xml      (480x800)
      res/values-large-mdpi/dimens.xml (600x1024)

      o

      res/values-sw600dp/dimens.xml      (600x1024)
      res/values-sw720dp/dimens.xml      (800x1280)
      res/values-xlarge-xhdpi/dimens.xml (2560x1600 - Nexus 10")
      res/values-large-xhdpi/dimens.xml  (1200x1920 - Nexus 7"(latest))

Pour plus d'informations :

  1. Se référer à Prise en charge de plusieurs écrans .

  2. Voir page# 77 de Google IO Pdf pour le design densité des dispositifs . En cela, vous trouverez le moyen de gérer dimens.xml pour différents appareils.

  3. Préparer vos applications pour Nexus 6 et Nexus 9 .

Extrait de Prise en charge de plusieurs écrans :

Le pixel indépendant de la densité est équivalent à un pixel physique sur un écran de 160 dpi, qui est la densité de base supposée par le système. pour un "moyen" écran de densité. Au moment de l'exécution, le système gère de façon transparente toute mise à l'échelle des unités dp, si nécessaire, en fonction de la densité réelle de l'écran utilisé. La conversion des unités dp en écran est simple : px = dp * (dpi / 160) . Par exemple, sur un écran de 240 ppp 1 dp correspond à 1,5 pixel physique. Vous devez toujours utiliser les unités dp lorsque vous définissez l'interface utilisateur de votre application, afin de garantir un affichage correct de votre interface utilisateur sur des écrans de densité différente. votre interface utilisateur sur des écrans de densité différente.

28voto

Pankaj Sharma Points 1418

D'abord vous créez les différents dossiers de valeurs pour les différents écrans.et mettez la taille selon les écrans dans res->values->dimens.xml et appeler la taille de la police simple en utilisant "@dimen/text_size" .

res/values/dimens.xml    
res/values-small/dimens.xml    
res/values-normal/dimens.xml    
res/values-xlarge/dimens.xml

//for small    
<?xml version="1.0" encoding="utf-8"?>
<resources>
   <dimen name="text_size">15sp</dimen>
</resources>

//for normal    
<?xml version="1.0" encoding="utf-8"?>
<resources>
   <dimen name="text_size">20sp</dimen>
</resources>

//for large    
<?xml version="1.0" encoding="utf-8"?>
<resources>
   <dimen name="text_size">30sp</dimen>
</resources>

//for xlarge    
<?xml version="1.0" encoding="utf-8"?>
<resources>
   <dimen name="text_size">40sp</dimen>
</resources>

et récupérer la taille de la police dans TextView comme indiqué ci-dessous.

<TextView
    android:id="@+id/lblHeader"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"           
    android:textSize="@dimen/text_size"
    android:textStyle="bold"
    android:typeface="serif" />

9voto

Dan Bray Points 576

Pour éviter les problèmes liés aux différentes résolutions d'écran et aux différentes densités, je dimensionne et positionne tout sur la base du pourcentage de largeur et de hauteur de l'écran. Si le texte est redimensionné sur la base du pourcentage de largeur ou de hauteur de l'écran, la police aura la taille correcte sur tous les appareils et toutes les résolutions. Pour obtenir la taille correcte de la police en fonction de la largeur et de la hauteur de son espace, il suffit d'utiliser cette fonction :

private float SetTextSize(String text, int width, int height)
{
    Paint paint = new Paint();
    float textWidth = paint.measureText(text);
    float textSize = (int) ((width / textWidth) * paint.getTextSize());
    paint.setTextSize(textSize);

    textWidth = paint.measureText(text);
    textSize = (int) ((width / textWidth) * paint.getTextSize());

    // Re-measure with font size near our desired result
    paint.setTextSize(textSize);

    // Check height constraints
    FontMetricsInt metrics = paint.getFontMetricsInt();
    float textHeight = metrics.descent - metrics.ascent;
    if (textHeight > height)
    {
        textSize = (int) (textSize * (height / textHeight));
        paint.setTextSize(textSize);
    }
    return textSize;
}

Voici le code pour obtenir la largeur et la hauteur de l'écran :

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR2)
{
    Point size = new Point();
    getWindowManager().getDefaultDisplay().getSize(size);
    screenWidth = size.x;
    screenHeight = size.y; 
}
else
{
    Display display = getWindowManager().getDefaultDisplay(); 
    screenWidth = display.getWidth(); 
    screenHeight = display.getHeight(); 
}

Pour obtenir la taille de police souhaitée, il suffit de créer une zone basée sur la largeur et la hauteur de l'écran et de l'ajuster jusqu'à ce que la taille de la police soit correcte. Une fois que vous l'avez obtenue, elle devrait être correcte sur tous les appareils.

float textSize = SetTextSize("text", (int) (screenWidth * 0.1), (int) (screenHeight * 0.15));

J'espère que cela vous aidera

8voto

Raanan Points 1928

En fait, vous devez créer un style de texte comme ceci :

<style name="CodeFont">
    <item name="android:textSize">30sp</item>
</style>

Pour en savoir plus, cliquez ici http://developer.Android.com/guide/topics/ui/themes.html

Et en utilisant le guide de prise en charge d'Android pour différents écrans pour créer les différentes tailles que vous souhaitez pour différents écrans dans les bons dossiers de résolution comme décrit dans : http://developer.Android.com/guide/practices/screens_support.html

Remarque : je ne comprends pas vraiment dans quelle situation vous voudriez faire cela, l'utilisation d'unités SP pour les tailles de police mettra à l'échelle les polices pour qu'elles aient plus ou moins la même taille sur différents téléphones.

4voto

Hemant Vc Points 928

Tout d'abord, votre application est conçue pour une seule résolution.

exemple : supposons que la résolution de votre mobile soit de 380*480.

       mobile screen width:380

       textView size is 80dp   
       Assume : if width is 380dp then 100 % then

               textview width 80dp then how many %(per).

            ower answer is: 25 %

trouver la taille de l'écran par programme en utilisant la formule belove

    DisplayMetric  displaymetrics = new DisplayMetrics();
    getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
    ScreenHeight = displaymetrics.heightPixels;
    ScreenWidth = displaymetrics.widthPixels;
        txt_height = (int)((ScreenHeight*14.58)/100);
    txt_width = (int)((ScreenWidth*37.5)/100);

    LinearLayout.LayoutParams normal_param = new LinearLayout.LayoutParams(txt_height ,txt_width );

    txt_Name.setLayoutParams(normal_param);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X