Valeurs valides pour Android: fontFamily et à quoi ils correspondent?

266

Dans la réponse à cette question, l'utilisateur répertorie les valeurs pour android:fontFamilyet 12 variantes (voir ci-dessous). D'où viennent ces valeurs? La documentation de android:fontFamilyne répertorie ces informations nulle part (j'ai vérifié ici et ici ). Les chaînes sont répertoriées dans le fichier Android styles.xml à divers endroits, mais comment sont-elles mappées à la police Roboto?

Depuis Android 4.1 / 4.2, les familles de polices Roboto suivantes sont disponibles:

android:fontFamily="sans-serif"           // roboto regular  
android:fontFamily="sans-serif-light"     // roboto light  
android:fontFamily="sans-serif-condensed" // roboto condensed  
android:fontFamily="sans-serif-thin"      // roboto thin (android 4.2)  
android:fontFamily="sans-serif-medium"    // roboto medium (android 5.0)

en combinaison avec cela

android:textStyle="normal|bold|italic" 

12 variantes sont possibles:

  • Régulier
  • Italique
  • Audacieux
  • Gras italique
  • Lumière
  • Italique clair
  • Mince
  • Italique fin
  • Condensé régulier
  • Italique condensé
  • Gras condensé
  • Condensé gras-italique

Dans le styles.xmlfichier de l'application, je travaille sur quelqu'un répertorié comme famille de polices, et je suis sûr que c'est faux:

<item name="android:fontFamily">Roboto-Regular.ttf</item>

Je voudrais que le thème de notre application soit correctement configuré (ce qui inclut l'utilisation correcte de fontFamily) et supprimer toute la redondance qui se trouve dans certains des styles créés avant de jeter un œil au fichier.

Christopher Perry
la source

Réponses:

346

D'où viennent ces valeurs? La documentation pour Android: fontFamily ne répertorie ces informations nulle part

Ceux-ci ne sont en effet pas répertoriés dans la documentation. Mais ils sont mentionnés ici dans la section «Familles de polices». Le document répertorie chaque nouvelle API publique pour Android Jelly Bean 4.1.

Dans le fichier styles.xml de l'application, je travaille sur une personne répertoriée comme famille de polices, et je suis sûr que c'est faux:

Oui, c'est faux. Vous ne faites pas référence au fichier de police, vous devez utiliser le nom de police mentionné dans le document lié ci-dessus. Dans ce cas, cela aurait dû être ceci:

<item name="android:fontFamily">sans-serif</item>

Comme la réponse liée déjà énoncée, 12 variantes sont possibles:

Ajouté dans Android Jelly Bean (4.1) - API 16:

Régulier (par défaut):

<item name="android:fontFamily">sans-serif</item>
<item name="android:textStyle">normal</item> 

Italique :

<item name="android:fontFamily">sans-serif</item>
<item name="android:textStyle">italic</item>

Audacieux :

<item name="android:fontFamily">sans-serif</item>
<item name="android:textStyle">bold</item>

Gras-italique :

<item name="android:fontFamily">sans-serif</item>
<item name="android:textStyle">bold|italic</item>

Lumière :

<item name="android:fontFamily">sans-serif-light</item>
<item name="android:textStyle">normal</item>

Italique clair :

<item name="android:fontFamily">sans-serif-light</item>
<item name="android:textStyle">italic</item>

Mince :

<item name="android:fontFamily">sans-serif-thin</item>
<item name="android:textStyle">normal</item>

Italique fin :

<item name="android:fontFamily">sans-serif-thin</item>
<item name="android:textStyle">italic</item>

Condensé régulier :

<item name="android:fontFamily">sans-serif-condensed</item>
<item name="android:textStyle">normal</item>

Italique condensé :

<item name="android:fontFamily">sans-serif-condensed</item>
<item name="android:textStyle">italic</item>

Gras condensé :

<item name="android:fontFamily">sans-serif-condensed</item>
<item name="android:textStyle">bold</item>

Condensé gras-italique :

<item name="android:fontFamily">sans-serif-condensed</item>
<item name="android:textStyle">bold|italic</item>

Ajouté dans Android Lollipop (v5.0) - API 21:

Moyen :

<item name="android:fontFamily">sans-serif-medium</item>
<item name="android:textStyle">normal</item>

Italique moyen :

<item name="android:fontFamily">sans-serif-medium</item>
<item name="android:textStyle">italic</item>

Noir :

<item name="android:fontFamily">sans-serif-black</item>
<item name="android:textStyle">italic</item>

Pour référence rapide, voici à quoi ils ressemblent tous:

Ahmad
la source
2
Haha: DI connaissait le site avant cela, donc il n'a pas été difficile de le trouver. Mais pour référence future: je préfère utiliser la recherche sur developer.android.com plutôt que la recherche Google, car vous pouvez limiter la recherche aux seules API, articles de blog, notes de publication, etc.
Ahmad
8
Et si vous êtes intéressé: C'est là sont définies les polices. Cette classe charge les polices et celle-ci les gère afaict.
Ahmad
1
@androiddeveloper done. Roboto noir ne fait pas référence à la couleur de la police, mais n'est qu'une version "plus audacieuse" de Roboto Bold. J'ai ajouté une image de référence en bas.
Ahmad
1
@Ahmad Merci d'avoir clarifié cela. Voici votre +1 ... :)
développeur Android
2
aussi, il y a beaucoup d'alias à utiliser avec fontFamily android.googlesource.com/platform/frameworks/base/+/master/data/…
Pauland
110

Polices disponibles (à partir d'Oreo)

Aperçu de toutes les polices

La page Material Design Typography propose des démonstrations de certaines de ces polices et des suggestions sur le choix des polices et des styles.

Pour les détectives de code: fonts.xmlest la liste définitive et sans cesse croissante des polices Android.


Utilisation de ces polices

Définissez les attributs android:fontFamilyet android:textStyle, par exemple

<!-- Roboto Bold -->
<TextView
    android:fontFamily="sans-serif"
    android:textStyle="bold" />

aux valeurs souhaitées de ce tableau:

Font                     | android:fontFamily          | android:textStyle
-------------------------|-----------------------------|-------------------
Roboto Thin              | sans-serif-thin             |
Roboto Light             | sans-serif-light            |
Roboto Regular           | sans-serif                  |
Roboto Bold              | sans-serif                  | bold
Roboto Medium            | sans-serif-medium           |
Roboto Black             | sans-serif-black            |
Roboto Condensed Light   | sans-serif-condensed-light  |
Roboto Condensed Regular | sans-serif-condensed        |
Roboto Condensed Medium  | sans-serif-condensed-medium |
Roboto Condensed Bold    | sans-serif-condensed        | bold
Noto Serif               | serif                       |
Noto Serif Bold          | serif                       | bold
Droid Sans Mono          | monospace                   |
Cutive Mono              | serif-monospace             |
Coming Soon              | casual                      |
Dancing Script           | cursive                     |
Dancing Script Bold      | cursive                     | bold
Carrois Gothic SC        | sans-serif-smallcaps        |

(Noto Sans est une police de secours; vous ne pouvez pas la spécifier directement)

Remarque: ce tableau est dérivé de fonts.xml. Le nom de famille et le style de chaque police sont répertoriés dans fonts.xml, par exemple

<family name="serif-monospace">
    <font weight="400" style="normal">CutiveMono.ttf</font>
</family>

serif-monospaceest donc la famille de polices et normalle style.


Compatibilité

Sur la base du journal de fonts.xml et de l'ancien system_fonts.xml , vous pouvez voir quand chaque police a été ajoutée:

  • Sandwich à la crème glacée: Roboto régulier, gras, italique et gras italique
  • Jelly Bean: Roboto light, light italic, condensed, condensed bold, condensed italic et condensed bold italic
  • Jelly Bean MR1: Roboto mince et mince italique
  • Sucette:
    • Roboto moyen, moyen italique, noir et noir italique
    • Noto Serif régulier, gras, italique, gras italique
    • Cutive Mono
    • Bientôt disponible
    • Script de danse
    • Carrois Gothic SC
    • Noto Sans
  • Oreo MR1: milieu condensé Roboto
Newtonx
la source
1
comment avez-vous trouvé sur le journal la version Android?
développeur Android
3
@androiddeveloper Je regardais les dates auxquelles chaque ligne a été ajoutée. Pour savoir précisément quelles polices sont disponibles dans une version particulière, consultez system_fonts.xml pour cette version, par exemple pour Lollipop: android.googlesource.com/platform/frameworks/base/+/…
Newtonx
Mon seul et unique reproche, c'est qu'il n'est pas alphabétisé: p Mais quand même! Cela devrait être la meilleure réponse! Je vous remercie!
T.Woody
9

Pour autant que je sache, vous ne pouvez pas déclarer de polices personnalisées en xml ou en thèmes. Je crée généralement des classes personnalisées étendant textview qui définissent leur propre police lors de l'instanciation et les utilise dans mes fichiers XML de mise en page.

c'est à dire:

public class Museo500TextView extends TextView {
    public Museo500TextView(Context context, AttributeSet attrs) {
        super(context, attrs);      
        this.setTypeface(Typeface.createFromAsset(context.getAssets(), "path/to/font.ttf"));
    }
}

et

<my.package.views.Museo900TextView
        android:id="@+id/dialog_error_text_header"
        android:layout_width="190dp"
        android:layout_height="wrap_content"
        android:gravity="center_horizontal"
        android:textSize="12sp" />
trébucher
la source
1
Cela peut vous coûter beaucoup de mémoire dans une vue de recyclage
Florescu Cătălin