web-dev-qa-db-fra.com

Taille du texte avec une résolution différente

j'utilise un onglet de galaxie 1, 7 pouces hdpi et un onglet de galaxie plus, 7 pouces hdpi mais plus de résolution, et dans mon application, le texte peut être lu bien dans l'onglet de galaxie, mais dans l'onglet de galaxie, il y a trop petit. J'utilise sp dans la taille de la police et la mise en page. Une idée? Merci

13
colymore

Cela devrait vous aider si vous souhaitez définir la taille par programme. Le texte s'affichera dans la même taille sur chaque appareil

TextView text = new TextView(this);
text.setText("text");
text.setTextSize(16 * getResources().getDisplayMetrics().density);
33
Dr Glass

Selon les spécifications matérielles, Galaxy Tab 1 est un périphérique MDPI, mais comme il utilise Android 2.x, Samsung le configure par programme pour utiliser les ressources HDPI. Je peux donc vous conseiller de faire ce qui suit:

  1. Créez le fichier dimens.xml dans le répertoire values.
  2. Mettez là <dimen name="font_size">30sp</dimen>. C'est la taille de police par défaut.
  3. Créez le fichier dimens.xml dans le répertoire values-large.
  4. Mettez là <dimen name="font_size">20sp</dimen>. C'est la taille de police pour l'onglet 1 de galaxy.
  5. Créez le fichier dimens.xml dans le répertoire values-sw600dp.
  6. Mettez là <dimen name="font_size">30sp</dimen>. C'est la taille de police pour les autres tablettes avec Android 3.x et plus récent.
  7. Dans la mise en page, spécifiez Android:textSize="@dimens/font_size"
19
vasart

il vous suffit de créer différents dossiers liés à la densité ou à la taille de l'écran.

Option 1.

values-large
values-small
values-normal

Pour plus d'explications, consultez ce lien ...

Support d'écran multiple

Option 2.

mTextView.setTextSize(16 * getResources().getDisplayMetrics().density);

cela donnera TextSize en fonction de la densité.

15
SilentKiller

(1) Je pense que l’utilisation de "dp" ou "dip" pour le texte est préférable à l’utilisation de "sp" car dp (pixel de densité) s’ajuste en fonction de la densité de l’écran. Ainsi, le texte paraîtra plus gros sur les appareils haute densité et plus petit sur les appareils basse densité.

(2) OR si vous souhaitez spécifiquement utiliser "sp" pour la taille du texte, vous pouvez alors détecter la densité du périphérique, puis définir la taille du texte en conséquence:

    DisplayMetrics displayMetrics = new DisplayMetrics();
    getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
    switch(displayMetrics.densityDpi){ 
        case DisplayMetrics.DENSITY_LOW: 
            //set text-size for low-density devices.
            break; 
        case DisplayMetrics.DENSITY_MEDIUM: 
            //set text-size for medium-density devices.
            break; 
        case DisplayMetrics.DENSITY_HIGH: 
            //set text-size for high-density devices.
            break; 
    } 
4
Yogesh Somani

essaye ça:

comme ça

Android:textSize= "10sp"

sp

Pixels indépendants de l'échelle - Cela ressemble à l'unité dp, mais c'est aussi mise à l'échelle en fonction de la préférence de taille de police de l'utilisateur. Il est recommandé d’utiliser cette unité lors de la spécification des tailles de police, elles seront donc ajustées pour la densité de l'écran et les préférences de l'utilisateur.

4

Le code ci-dessous ajuste l'échelle de la taille de la police dans un textView à l'aide du paramètre Taille de la police système de l'utilisateur.

Display display = getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getRealSize(size);
int screenWidth = size.x;
float fontscale = getResources().getConfiguration().fontScale;
float textSize = (screenWidth/ fontscale)/10;
Log.e(TAG, "textSize is:  " + textSize);
yourTextView.setTextSize(TypedValue.COMPLEX_UNIT_SP,  textSize);
2
Rick

Vous pouvez utiliser n'importe laquelle de this dimensions, ce marché comme basé sur la taille physique de l'écran. Les textes de tous les appareils auront la même taille physique.

2
Jin35
2
bashu

TextView headerTextView (Libellé de chaîne) {

    TextView headerTextView = new TextView(this.context);
    float scale = context.getResources().getDisplayMetrics().density;
    if(scale > 2.0) {
    headerTextView.setWidth(210);
    headerTextView.setHeight(120);
    headerTextView.setTextSize(17);
    }
    else {
        headerTextView.setWidth(125);
        headerTextView.setHeight(60);
        headerTextView.setTextSize(21);
    }
1
yug

En bref, vous pouvez utiliser scalable DP et scalable Font .

La structure de projet Android permet intrinsèquement de spécifier différentes tailles de police (SP) et valeurs de marge (DP) en les définissant dans des fichiers dimens.xml pour les tailles d'écran prises en charge. Mais le problème qui reste est toujours: quelles valeurs utiliser? Les concepteurs UX fournissent normalement des guides de style pour un seul jeu (par exemple, une taille d'écran DP de 360x640) et ne fournissent pas toutes les autres tailles d'écran prises en charge. Par conséquent, le problème lié à l'utilisation de valeurs correctes pour d'autres tailles d'écran prises en charge reste toujours sans réponse. 

Une bonne solution (d'après ce que je comprends) consiste à utiliser un dictionnaire scalable readymade de fichiers dimens.xml, similaire au dictionnaire de fichiers fourni par this library. Après avoir ajouté ces fichiers XML au projet, il vous suffit d'utiliser les clés de vos mises en page, puis Android utilise automatiquement la valeur de police/marge du répertoire respectif. Veuillez vous référer à ici pour une différence visuelle - avec et sans cette approche.

0
birender

pour textSize, Google a suggéré d'utiliser "sp" au lieu de "dp" enter image description here

cliquez sur ce lien http://developer.Android.com/design/style/typography.html

et pour prendre en charge la taille de police pour plusieurs écrans, vous devez créer une nouvelle ressource pour chaque taille d'écran http://developer.Android.com/guide/topics/resources/more-resources.html#Dimension

0
Fahriyal Afif

TextView tv = new TextView (contexte); Tv.setText ("Hello World");

// Value est un pixel mis à l'échelle (SP) Tv.setTextSize (TypedValue.COMPLEX_UNIT_SP, 20f);

// La valeur est DIP (Device Independent Pixels) Tv.setTextSize (TypedValue.COMPLEX_UNIT_DIP, 20f);

// valeur est pixels bruts (PX) Tv.setTextSize (TypedValue.COMPLEX_UNIT_PX, 20f);

// La valeur est en points (PT) Tv.setTextSize (TypedValue.COMPLEX_UNIT_PT, 20f);

// la valeur est en millimètres (MM) Tv.setTextSize (TypedValue.COMPLEX_UNIT_MM, 20f);

// La valeur est en pouces (IN) Tv.setTextSize (TypedValue.COMPLEX_UNIT_IN, 20f);

0
Darkman