Valori validi per Android: fontFamily e cosa mappano?


266

Nella risposta a questa domanda l'utente elenca i valori per android:fontFamilye 12 varianti (vedi sotto). Da dove vengono questi valori? La documentazione per android:fontFamilynon elenca queste informazioni in nessun luogo (ho controllato qui e qui ). Le stringhe sono elencate in Android file styles.xml di in vari punti, ma come si associano al font Roboto?

Da Android 4.1 / 4.2 sono disponibili le seguenti famiglie di caratteri Roboto:

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)

in combinazione con questo

android:textStyle="normal|bold|italic" 

Sono possibili 12 varianti:

  • Regolare
  • Corsivo
  • Grassetto
  • Italico grassetto
  • Luce
  • Light-italico
  • Magro
  • Thin-italico
  • Condensato regolare
  • Corsivo condensato
  • Condensato grassetto
  • Grassetto corsivo condensato

Nel styles.xmlfile dell'applicazione sto lavorando su qualcuno elencato come famiglia di caratteri e sono quasi sicuro che sia sbagliato:

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

Vorrei impostare correttamente il tema per la nostra app (che include l'uso corretto di fontFamily) e rimuovere tutta la ridondanza presente in alcuni stili creati prima di dare un'occhiata al file.

Risposte:


346

Da dove vengono questi valori? La documentazione per Android: fontFamily non elenca queste informazioni in nessun luogo

Questi infatti non sono elencati nella documentazione. Ma sono menzionati qui nella sezione "Famiglie di caratteri". Il documento elenca ogni nuova API pubblica per Android Jelly Bean 4.1.

Nel file styles.xml nell'applicazione sto lavorando su qualcuno elencato come famiglia di caratteri e sono abbastanza sicuro che sia sbagliato:

Sì, è sbagliato. Non fai riferimento al file del carattere, devi usare il nome del carattere menzionato nel documento collegato sopra. In questo caso avrebbe dovuto essere questo:

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

Come la risposta collegata già indicata, sono possibili 12 varianti:

Aggiunto in Android Jelly Bean (4.1) - API 16:

Regolare (impostazione predefinita):

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

Corsivo :

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

Grassetto :

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

Grassetto-corsivo :

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

Luce :

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

Corsivo chiaro :

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

Magro :

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

Thin-italico :

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

Condensato regolare :

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

Corsivo condensato :

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

Condensato in grassetto :

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

Grassetto corsivo condensato :

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

Aggiunto in Android Lollipop (v5.0) - API 21:

Medio :

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

Medio corsivo :

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

Nero :

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

Per un rapido riferimento, ecco come appaiono tutti:


2
Haha: DI in realtà conosceva il sito prima di quello, quindi trovarlo non è stato difficile. Ma per riferimento futuro: preferisco utilizzare la ricerca su developer.android.com sulla ricerca di Google, poiché puoi limitare la ricerca solo alle API, ai post sul blog, alle note di rilascio ecc.
Ahmad,

8
E se siete interessati: Questo è dove sono definiti i tipi di carattere. Questa classe carica i caratteri e questo li gestisce afaict.
Ahmad,

1
@androiddeveloper done. Il nero Roboto non si riferisce al colore del carattere, ma è solo una versione "più audace" di Roboto Bold. Ho aggiunto un'immagine di riferimento in fondo.
Ahmad,

1
@Ahmad Grazie per aver chiarito questo. Ecco il tuo +1 ... :)
sviluppatore Android

2
inoltre, c'è molto alias da usare con fontFamily android.googlesource.com/platform/frameworks/base/+/master/data/…
Pauland

110

Font disponibili (a partire da Oreo)

Anteprima di tutti i caratteri

La tipografia del design dei materiali pagina contiene demo per alcuni di questi font e suggerimenti sulla scelta dei font e degli stili.

Per code sleuth: fonts.xmlè l'elenco definitivo e in continua espansione di caratteri Android.


Usando questi caratteri

Impostare gli attributi android:fontFamilye android:textStyle, ad es

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

ai valori desiderati da questa tabella:

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 è un carattere di fallback; non è possibile specificarlo direttamente)

Nota: questa tabella è derivata da fonts.xml. Il nome e lo stile di ogni font sono elencati in fonts.xml, ad es

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

serif-monospaceè quindi la famiglia di caratteri ed normalè lo stile.


Compatibilità

Basato sul registro di fonts.xml e del precedente system_fonts.xml , puoi vedere quando ogni carattere è stato aggiunto:

  • Ice Cream Sandwich: Roboto normale, grassetto, corsivo e grassetto corsivo
  • Jelly Bean: Roboto leggero, corsivo chiaro, condensato, grassetto condensato, corsivo condensato e corsivo grassetto condensato
  • Jelly Bean MR1: Roboto corsivo sottile e sottile
  • Lecca-lecca:
    • Roboto medio, corsivo medio, corsivo nero e nero
    • Noto Serif normale, grassetto, corsivo, grassetto corsivo
    • Cutive Mono
    • Prossimamente
    • Dancing Script
    • Carrois Gothic SC
    • Noto Sans
  • Oreo MR1: mezzo condensato Roboto

1
come hai trovato nel registro della versione di Android?
sviluppatore Android

3
@androiddeveloper Stavo guardando le date in cui ogni riga è stata aggiunta. Per sapere con precisione quali caratteri sono disponibili in una particolare versione, guarda system_fonts.xml per quella versione, ad esempio per Lollipop: android.googlesource.com/platform/frameworks/base/+/…
Newtonx

La mia unica lamentela è che non è in ordine alfabetico: p Ma comunque! Questa dovrebbe essere la risposta migliore! Grazie!
T.Woody,

9

Per quanto ne so, non puoi dichiarare caratteri personalizzati in XML o temi. Di solito creo solo classi personalizzate estendendo la visualizzazione del testo che imposta il proprio carattere sull'istanza e uso quelle nei miei file xml di layout.

vale a 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"));
    }
}

e

<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" />

1
Questo ti può costare un sacco di memoria in una vista di riciclo
Florescu Cătălin,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.