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
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);
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:
dimens.xml
dans le répertoire values
.<dimen name="font_size">30sp</dimen>
. C'est la taille de police par défaut.dimens.xml
dans le répertoire values-large
.<dimen name="font_size">20sp</dimen>
. C'est la taille de police pour l'onglet 1 de galaxy.dimens.xml
dans le répertoire values-sw600dp
.<dimen name="font_size">30sp</dimen>
. C'est la taille de police pour les autres tablettes avec Android 3.x et plus récent.Android:textSize="@dimens/font_size"
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 ...
Option 2.
mTextView.setTextSize(16 * getResources().getDisplayMetrics().density);
cela donnera TextSize en fonction de la densité.
(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;
}
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.
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);
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.
Mieux vaut utiliser différentes valeurs, jetez un coup d'œil -
Différents dossiers de valeurs sous Android
pour plus jeter un oeil
http://developer.Android.com/guide/topics/resources/more-resources.html#Dimension
Bases des pixels indépendants de l'appareil
OR
http://developer.Android.com/guide/practices/screens_support.html
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);
}
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.
pour textSize, Google a suggéré d'utiliser "sp" au lieu de "dp"
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
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);