Je sais, cela a déjà été discuté 1000 fois, mais je ne peux pas ajuster la taille du texte pour différentes tailles d'écran. J'essaie d'utiliser 'sp' comme unités de taille dans mon style personnalisé:
<style name="CustumButtonStyle" parent="@android:style/Widget.Button">
...
<item name="android:textSize">30sp</item>
...
</style>
Dans 2.7 QVGA, cela semble correct:
Mais dans WSVGA 7in, cela ressemble à ceci:
J'ai essayé d'utiliser à la fois «sp» et «dp» avec le même résultat.
Pourriez-vous s'il vous plaît expliquer comment rendre ces boutons identiques sur n'importe quel écran?
Le style de bouton personnalisé complet
<style name="CustumButtonStyle" parent="@android:style/Widget.Button">
<item name="android:background">@drawable/custom_button</item>
<item name="android:layout_width">fill_parent</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:layout_margin">3dp</item>
<item name="android:textColor">#ffffff</item>
<item name="android:gravity">center</item>
<item name="android:textSize">30sp</item>
<item name="android:textStyle">bold</item>
<item name="android:shadowColor">#000000</item>
<item name="android:shadowDx">1</item>
<item name="android:shadowDy">1</item>
<item name="android:shadowRadius">2</item>
</style>
Et dans mon thème d'application, j'ai
<item name="android:buttonStyle">@style/CustumButtonStyle</item>
Et voici ma mise en page:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/RelativeLayout1"
android:layout_width="fill_parent"
android:background="@drawable/grid"
android:gravity="center"
android:orientation="vertical" android:layout_height="fill_parent">
<Button
android:id="@+id/buttonContinue"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_gravity="center"
android:gravity="center"
android:text="@string/continue_game" android:layout_marginTop="3dp" android:layout_marginBottom="3dp"/>
<Button
android:id="@+id/buttonNewGame"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/buttonContinue"
android:layout_alignRight="@+id/buttonContinue"
android:layout_below="@+id/buttonContinue"
android:layout_gravity="center"
android:gravity="center"
android:text="@string/new_game" android:layout_marginTop="3dp" android:layout_marginBottom="3dp"/>
<Button
android:id="@+id/ButtonAbout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/buttonNewGame"
android:layout_alignRight="@+id/buttonNewGame"
android:layout_below="@+id/buttonNewGame"
android:layout_gravity="center"
android:gravity="center"
android:text="@string/about" android:layout_marginTop="3dp" android:layout_marginBottom="3dp"/>
android
screen-size
text-size
forcelaine
la source
la source
Réponses:
@forcelain Je pense que vous devez vérifier ce PDF Google IO pour la conception . Dans ce pdf, allez à la page n °: 77 dans laquelle vous trouverez comment suggérer d'utiliser dimens.xml pour différents appareils d'Android pour Exemple voir la structure ci-dessous:
par exemple, vous avez utilisé ci-dessous dimens.xml dans les valeurs.
Dans un autre dossier de valeurs, vous devez modifier les valeurs de votre taille de texte.
Remarque: comme indiqué par @espinchi, les options small, normal, large et xlarge sont obsolètes depuis Android 3.2 au profit de ce qui suit:
Déclaration des dispositions de tablette pour Android 3.2
la source
Je pense qu'il est trop tard pour répondre sur ce fil. Mais je voudrais partager mon idée ou mon moyen de résoudre le problème de taille du texte sur les appareils de résolution de différence. De nombreux sites de développeurs Android suggèrent que nous devions utiliser l' unité sp pour la taille du texte, qui gérera la taille du texte pour les appareils de résolution différente. Mais je suis toujours incapable d'obtenir le résultat souhaité. J'ai donc trouvé une solution que j'utilise à partir de mes 4-5 derniers projets et cela fonctionne bien. Selon ma suggestion, vous devez placer la taille du texte pour chaque périphérique de résolution, ce qui est un travail un peu fastidieux, mais cela répondra à vos besoins. Chaque développeur doit écouter le rapport comme 4: 6: 8: 12 (h: xh: xxh: xxxh respectivement) . Maintenant , dans votre projet res dossier , vous devez créer un dossier avec 4 fichier dimens par exemple
Maintenant, dans le fichier dimens.xml, vous devez placer les tailles de texte. Je vous montre le code pour values-hdpi , de même vous devez placer le code pour d'autres valeurs de résolution / fichier dimens.xml.
Pour les autres résolutions, c'est comme xhdpi : 6px, xxhdpi : 8px, xxxhdpi : 12px. Ceci est calculé avec le rapport (3: 4: 6: 8: 12) que j'ai écrit ci-dessus. Permet de discuter d'un autre exemple de taille de texte avec le ratio ci-dessus. Si vous souhaitez prendre une taille de texte de 12px en hdpi, alors dans une autre résolution, ce serait
C'est la solution simple pour implémenter la taille de texte requise pour toutes les résolutions. Je ne considère pas ici les périphériques de résolution valeurs-mdpi . Si quelqu'un veut inclure la taille du texte pour cette résolution, la ration est comme 3: 4: 6: 8: 12 . Pour toute question, veuillez me le faire savoir. J'espère que cela vous aidera.
la source
Parfois, il vaut mieux n'avoir que trois options
Utilisez petit et grand pour différencier de la taille d'écran normale.
Pour normal, vous n'avez rien à spécifier.
En utilisant cela, vous pouvez éviter de tester et de spécifier des dimensions pour différentes tailles d'écran.
la source
J'ai fait la même chose par dimension et j'ai peint quelque chose comme (avec dp mais uniquement pour le texte et dans drawText ())
XML:
Code:
la source
dp
pour la taille du texte ... utilisez à lasp
place.Tout le monde peut utiliser la bibliothèque Android mentionnée ci-dessous, qui est le moyen le plus simple de rendre les tailles de texte compatibles avec presque tous les écrans des appareils. Il s'est en fait développé sur la base de nouveaux qualificatifs de configuration Android pour la taille de l'écran (introduits dans Android 3.2) SmallestWidth swdp.
https://github.com/intuit/sdp
la source
Si vous disposez de l'API 26, vous pouvez envisager d'utiliser autoSizeTextType :
Le paramètre par défaut permet le dimensionnement automatique de TextView à l'échelle uniformément sur les axes horizontaux et verticaux.
https://developer.android.com/guide/topics/ui/look-and-feel/autosizing-textview
la source
Je pense que vous pouvez archiver cela en ajoutant plusieurs ressources de mise en page pour chaque taille d'écran, exemple:
Référence: 1. http://developer.android.com/guide/practices/screens_support.html
la source
Pour unifier tous les écrans pour afficher les mêmes tailles d'éléments, y compris la taille de la police: - Concevez l'interface utilisateur sur une taille d'écran avec toutes les tailles que vous trouvez appropriées pendant la conception, c'est-à-dire que la taille de la police TextView est de 14dp sur la taille d'écran par défaut avec 4'6 pouces.
Calculez par programme la taille physique de l'écran des autres téléphones, c'est-à-dire 5'2 pouces des autres téléphones / écrans.
Utilisez une formule pour calculer la différence en pourcentage entre les 2 écrans. c'est-à-dire quelle est la différence en% entre 4'6 et 5'2.
Calculez la différence de pixels entre les 2 TextViews en vous basant sur la formule ci-dessus.
Obtenez la taille réelle (en pixels) de la taille de police TextView et appliquez la différence de pixels (que vous avez calculée précédemment) à la taille de police par défaut.
De cette façon, vous pouvez appliquer un rapport hauteur / largeur dynamique à toutes les tailles d'écran et le résultat est excellent. Vous aurez une disposition et des tailles identiques sur chaque écran.
Cela peut être un peu délicat au début, mais atteint totalement l'objectif une fois que vous avez compris la formule. Avec cette méthode, vous n'avez pas besoin de créer plusieurs mises en page simplement pour s'adapter à différentes tailles d'écran.
la source
Vous pouvez également utiliser
weightSum
etlayout_weight
propriété pour ajuster vos différents écrans.Pour cela, vous devez faire
android:layout_width
= 0dp, etandroid:layout_width
= (ce que vous voulez);la source
Comme @espinchi l'a mentionné à partir de 3.2 (niveau d'API 13), les groupes de taille sont obsolètes. Les gammes de tailles d'écran sont l'approche privilégiée à l'avenir.
la source
Ne codez pas en dur les tailles.
Pour plus de flexibilité et de nouvelles résolutions d'écran, la meilleure pratique consiste à placer TextView factice dans la mise en page pour obtenir le textSize:
Et dans votre code par exemple:
Gardez
textSize
comme référence à laquelle vous pouvez ajouter une taille constante ou en pourcentage (en calculant).la source