web-dev-qa-db-fra.com

Android sp vs textes dp - ce qui ajusterait l '«échelle» et quelle est la philosophie du support

Nous savons donc de nombreux autres articles que nous devons utiliser sp plutôt que dp pour le texte dans Android, et nous savons que cela est dû au respect des "préférences de l'utilisateur".

Mais quelles sont précisément ces préférences? Comment un utilisateur peut-il modifier ce paramètre?

Je ne trouve aucune référence dans les paramètres de mon téléphone (je m'attendais à quelque chose dans "Accessibilité" ou "Affichage"). Qu'est-ce qu'un paramètre utilisateur? Cela se fait-il uniquement par le biais d'une application telle que "Big Font"?

En supposant que ce soit (défini par quelque chose comme une grande police) - J'ai joué avec Google Docs et d'autres applications Google avec la police définie à 130%. Alors que la plupart des mises en page restent correctes, certaines sont un peu coupées et ne peuvent pas être lues (et c'est sur un SGS2 à grand écran). Alors, quelle est l'approche pour développer des applications avec des tailles de texte en utilisant 'sp'? Est-ce que nous nous assurons que cela fonctionne sur une mise à l'échelle à 100%, puis ignorons les autres paramètres - appelons cela un cas spécial dont l'utilisateur peut s'inquiéter, ou faisons-nous de notre mieux pour nous assurer que les choses s'étendent ou défilent, au cas où le texte déborde ?

Un argument est que nous devrions utiliser 'dp' pour garantie un utilisateur a une chance de voir le texte (même s'il doit utiliser une loupe)

Réflexions/commentaires?

22
Sam

Il est exposé dans le menu des paramètres de certains appareils Android (selon le fabricant). Il peut également être modifié par certaines options d'accessibilité (selon l'appareil).

En général, vous devez toujours utiliser des pixels indépendants de l'échelle, en particulier pour un corps de texte volumineux.

Cependant, si votre texte doit s'insérer dans un cadre de sélection de taille connue, vous devez utiliser des pixels indépendants de la densité afin de vous assurer que le texte s'adapte toujours correctement et que tous les caractères sont visibles quel que soit le réglage des utilisateurs.

En un mot: l'augmentation de la taille du texte d'environ 5sp entraînerait-elle la lisibilité du texte ou modifierait-elle votre interface utilisateur? Si c'est le cas, utilisez des pixels indépendants de la densité. Sinon, utilisez des pixels indépendants de l'échelle. Cependant, vous devez généralement viser à utiliser des pixels indépendants de l'échelle dans la mesure du possible, ce qui signifie concevoir une interface utilisateur pouvant accueillir différentes tailles de texte.

54
Joseph Earl

L'utilisation de l'unité sp est recommandée pour le texte car en ICS et plus (pourrait aussi être Honeycomb, corrigez-moi si je me trompe), il y a is = une préférence pour la taille de la police d'un utilisateur. Donc, si vous utilisez Gingerbread ou moins, vous ne pourrez pas trouver ce paramètre.

La préférence est sous Paramètres, Affichage, Taille de police. Il y a aussi une option sous Paramètres, Accessibilité, Grand texte, aussi.

Pour répondre à votre question sur l'utilisation de sp, notez que par défaut, sans modifier les préférences de taille de police, 1sp est équivalent à 1dp (aussi, ils sont équivalents avant l'introduction de la préférence). Comme vous l'avez noté, la conception pour le cas où un utilisateur a du texte énorme nécessiterait probablement que vous supposiez que les choses vont devoir défiler là où vous ne vous y attendriez pas.

6
wsanville

La réponse réside dans l'examen de cette question particulière de manière globale.

La motivation pour utiliser "sp" pour les tailles de police réside dans le fait de donner au développeur le pouvoir de contrôler leur mise en page face à un utilisateur qui change la taille de police sur son appareil.

Exemple:

Regardons 2 cas extrêmes:

1) L'utilisateur sélectionne la taille de police "petite"

Voici à quoi ressemble ma mise en page:

http://postimg.org/image/kiyqeo2bh/

Voici la mise en page xml:

<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:tools="http://schemas.Android.com/tools"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:paddingBottom="16dp"
Android:paddingLeft="16dp"
Android:paddingRight="16dp"
Android:paddingTop="16dp"
tools:context=".MainActivity"
Android:orientation="vertical">

<TextView
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:layout_row="0"
    Android:layout_column="0"
    Android:text="Material-Design ist die Scheiße"
    Android:textSize="18sp"
    Android:background="#ffff0000" />
<TextView
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:layout_row="0"
    Android:layout_column="0"
    Android:text="Material-Design ist die Scheiße"
    Android:textSize="25sp"
    Android:background="#ffff0000" />

2) Si l'utilisateur sélectionne la taille de police "énorme":

Voici à quoi ressemble ma mise en page:

http://postimg.org/image/d7rax9wob/

Ma mise en page xml est la même que ci-dessus dans le cas 1).

Donc, comme vous pouvez voir ce qui s'est passé ici, TextView a une taille de police parfaite en sp car il ne couvre pas l'intégralité de la plage de tailles de police (petite à énorme). Mais le TextView en bas gâche complètement votre mise en page/conception dans le cas 2).

Ainsi, en tant que développeur, vous pouvez itérer et décider de la taille en sp qui convient à votre conception et Android la dessinera pour vous.

1
dessertcook