web-dev-qa-db-fra.com

Différent support de résolution android

Question modifiée:

Résolution mobile:
J'aimerais créer 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 (lien 7),
1200x1920 (nouveau lien 7),
2048x1536 (lien 9)

Je souhaite 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 problem?

Q2) Quelle est la meilleure option pour le codage en jet ou XML?

Q3) Quel dossier pouvant être dessiné représente quelle résolution de périphérique?

Q4) Taille de l'icône du programme de lancement d'applicatifs pour une résolution différente?

78
Bhavesh Jethani

Taille de l'icône du lanceur d'applications en pixels pour une résolution différente

Résolution mobile

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

Dispositions de la tablette:

Utilisez les dossiers suivants si vous souhaitez avoir des dispositions spécifiques à la tablette:

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

Dossiers tirables:

  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

    Tailles de police:

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

  1. Utilisez textAppearance prédéfini:

    Il définira automatiquement la taille du texte en fonction de la densité de l'appareil.

    <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. Utilisez dimension.xml Pour chaque périphérique:

    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 tablette, 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)
      

      ou

      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. Reportez-vous à Prise en charge de plusieurs écrans .

  2. Voir page 77 de Google IO Pdf pour Design densité du périphérique . 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 ppp, ce qui correspond à la densité de base supposée par le système pour une densité "moyenne" écran. Au moment de l'exécution, le système gère de manière transparente toute mise à l'échelle des unités dp, en fonction de la densité réelle de l'écran utilisé. La conversion des unités dp en pixels d’écran est simple: px = dp * (dpi / 160). Par exemple, sur un écran de 240 dpi, 1 dp équivaut à 1,5 pixel physique. Vous devez toujours utiliser les unités dp lors de la définition de l'interface utilisateur de votre application, afin de garantir un affichage correct de votre interface utilisateur sur des écrans de densités différentes.

186
Bhavesh Jethani

Commencez par créer les différents dossiers de valeurs pour différents écrans et mettez la taille en fonction des écrans dans res->values->dimens.xml fichier et appelez la taille de 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érez 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" />
27
PankajSharma

Fondamentalement, vous devez créer un style de texte à peu près comme ceci:

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

en savoir plus à ce sujet ici http://developer.Android.com/guide/topics/ui/themes.html

Et en utilisant le guide Android pour différents écrans pour créer les tailles souhaitées pour différents écrans dans les dossiers de droite, comme décrit dans: http://developer.Android.com /guide/practices/screens_support.html

Note latérale: Je ne comprends pas vraiment dans quelle situation voudriez-vous faire cela, utiliser SP des unités pour les tailles de police va redimensionner les polices pour qu'elles aient plus ou moins la même taille sur différents téléphones.

8
Raanan

Pour éviter les problèmes de différentes résolutions d'écran et de différentes densités, je dimensionne et positionne tout en fonction du pourcentage de largeur et de hauteur de l'écran. Si le texte est redimensionné en fonction du pourcentage de largeur ou de hauteur de l'écran, la taille de la police sera correcte sur tous les périphériques et toutes les résolutions. Pour obtenir la taille de police correcte en fonction de la largeur et de la hauteur de son espace, utilisez simplement 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, créez simplement une zone en fonction de la largeur et de la hauteur de l'écran et ajustez-la jusqu'à ce que la taille de la police apparaisse à droite. Une fois l’apparence correcte, tous les appareils doivent apparaître.

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

J'espère que ceci vous aide

8
Dan Bray

Commencez par concevoir votre application pour une résolution.

exemple: supposons votre résolution mobile 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 ci-dessous

    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);
4
Hemantvc

Je pense que c'est une bonne réponse:

Taille du texte et différents Android tailles d'écran

Mais voici comment vous pouvez le faire avec une résolution d'écran:

Vous pouvez créer un répertoire de ressources "valeurs" pour chaque résolution, comme

values-wWIDTHp-hHEIGHTdp (you can also use values-wWIDTHp or values-hHEIGHTdp)
for example: 320*480 will be values-w320p-h480dp

Dans chaque répertoire (y compris les valeurs par défaut, répertoire), créez un fichier nommé "dimens.xml" avec le contenu suivant:

 for exmaple (the value related to the resolution):
 <dimen name="def_font_size">10sp</dimen>

Vous pouvez maintenant utiliser "@ dimen/def_font_size" ou créer un style dans le répertoire des valeurs par défaut.

Ajoutez ceci au "styles.xml":

<style name="FontSize">
    <item name="Android:textSize">@dimen/def_font_size</item>
</style>
3
naif.ult

Pour la prise en charge des appareils Nexus 6, créez un dossier drawable de 560 dpi et placez-y toutes les images.

1
Anand Savjani

J'ai créé une fonction qui convertit la taille de dp en taille en fonction de la taille de l'écran et cela fonctionne bien pour moi. Toute personne ayant un problème avec la taille du texte en fonction de l'écran devrait l'essayer.

public float convertFromDp(int input) {
    final float scale = getResources().getDisplayMetrics().density;
    return ((input - 0.5f) / scale);
}

simple donnez la valeur donnée par cela à la taille de la vue texte programmée comme ci-dessous

tvTextView1.setTextSize(convertFromDp(24));
1
Furqan Ali