Gültige Werte für Android: fontFamily und was sie zuordnen?

265

In der Antwort auf diese Frage listet der Benutzer Werte für android:fontFamilyund 12 Varianten auf (siehe unten). Woher kommen diese Werte? In der Dokumentation für sind android:fontFamilydiese Informationen an keiner Stelle aufgeführt (ich habe sie hier und hier überprüft ). Die Zeichenfolgen werden an verschiedenen Stellen in der Datei Android styles.xml aufgelistet. Wie werden diese jedoch der Roboto-Schriftart zugeordnet?

Ab Android 4.1 / 4.2 sind die folgenden Roboto-Schriftfamilien verfügbar:

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 Kombination damit

android:textStyle="normal|bold|italic" 

12 Varianten sind möglich:

  • Regulär
  • Kursiv
  • Fett gedruckt
  • Fett Kursiv
  • Licht
  • Leicht kursiv
  • Dünn
  • Dünn-kursiv
  • Regelmäßig verdichtet
  • Verkürzt kursiv
  • Fett zusammengefasst
  • Fett kursiv zusammengefasst

In der styles.xmlDatei in der Anwendung arbeite ich an jemandem, der dies als Schriftfamilie aufgeführt hat, und ich bin mir ziemlich sicher, dass es falsch ist:

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

Ich möchte das Thema für unsere App korrekt einrichten (einschließlich der korrekten Verwendung von fontFamily) und alle Redundanzen entfernen, die in einigen der Stile vorhanden sind, die erstellt wurden, bevor ich mir die Datei angesehen habe.

Christopher Perry
quelle

Antworten:

346

Woher kommen diese Werte? Die Dokumentation für android: fontFamily listet diese Informationen an keiner Stelle auf

Diese sind in der Tat nicht in der Dokumentation aufgeführt. Sie werden hier jedoch im Abschnitt "Schriftfamilien" erwähnt. Das Dokument listet jede neue öffentliche API für Android Jelly Bean 4.1 auf.

In der Datei styles.xml in der Anwendung arbeite ich an jemandem, der dies als Schriftfamilie aufgeführt hat, und ich bin mir ziemlich sicher, dass es falsch ist:

Ja, das ist falsch Sie verweisen nicht auf die Schriftartdatei, sondern müssen den im oben verlinkten Dokument genannten Schriftnamen verwenden. In diesem Fall hätte es so sein sollen:

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

Wie die bereits angegebene verknüpfte Antwort sind 12 Varianten möglich:

Hinzugefügt in Android Jelly Bean (4.1) - API 16:

Normal (Standard):

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

Kursiv :

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

Fett :

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

Fett kursiv :

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

Licht :

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

Leicht kursiv :

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

Dünn :

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

Dünn-kursiv :

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

Regelmäßig verkürzt :

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

Kurz kursiv :

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

Kurz zusammengefasst :

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

Fett kursiv zusammengefasst :

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

Hinzugefügt in Android Lollipop (v5.0) - API 21:

Medium :

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

Mittelkursiv :

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

Schwarz :

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

Zum schnellen Nachschlagen sehen sie alle so aus:

Ahmad
quelle
2
Haha: DI wusste vorher wirklich von der Seite, also war es nicht schwierig, sie zu finden. Aber zum späteren Nachschlagen: Ich bevorzuge die Suche auf developer.android.com gegenüber der Google-Suche, da Sie die Suche nur auf APIs, Blog-Beiträge, Versionshinweise usw. beschränken können
Ahmad
8
Und wenn Sie interessiert sind: Hier werden die Schriftarten definiert. Diese Klasse lädt die Schriftarten und diese verwaltet sie afaict.
Ahmad
1
@androiddeveloper fertig. Roboto Black bezieht sich nicht auf die Farbe der Schrift, sondern ist nur eine "mutigere" Version von Roboto Bold. Ich habe unten ein Referenzbild hinzugefügt.
Ahmad
1
@ Ahmad Vielen Dank für die Klarstellung. Hier ist dein +1 ... :)
Android-Entwickler
2
Außerdem gibt es eine Menge Alias ​​für fontFamily android.googlesource.com/platform/frameworks/base/+/master/data/…
Pauland
109

Verfügbare Schriftarten (ab Oreo)

Vorschau aller Schriftarten

Auf der Seite Material Design Typography finden Sie Demos für einige dieser Schriftarten sowie Vorschläge zur Auswahl von Schriftarten und Stilen.

Für Code-Sleuths: fonts.xmlist die endgültige und ständig wachsende Liste von Android-Schriftarten.


Verwenden dieser Schriftarten

Stellen Sie die Attribute android:fontFamilyund ein android:textStyle, z

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

zu den gewünschten Werten aus dieser Tabelle:

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 ist eine Fallback-Schriftart; Sie können sie nicht direkt angeben.)

Hinweis: Diese Tabelle ist abgeleitet von fonts.xml. Der Familienname und -stil jeder Schriftart ist in der Datei fonts.xml aufgeführt, z

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

serif-monospaceist also die Schriftfamilie und normalist der Stil.


Kompatibilität

Anhand des Protokolls von fonts.xml und der vorherigen system_fonts.xml können Sie sehen, wann jede Schriftart hinzugefügt wurde:

  • Ice Cream Sandwich: Roboto normal, fett, kursiv und fett kursiv
  • Jelly Bean: Roboto leicht, leicht kursiv, verdichtet, verdichtet fett, verdichtet kursiv und verdichtet fett kursiv
  • Jelly Bean MR1: Roboto dünn und dünn kursiv
  • Lutscher:
    • Roboto mittel, mittel kursiv, schwarz und schwarz kursiv
    • Noto Serif regelmäßig, fett, kursiv, fett kursiv
    • Cutive Mono
    • Demnächst
    • Tanzskript
    • Carrois Gothic SC
    • Noto Sans
  • Oreo MR1: Roboto-Kondensationsmedium
Newtonx
quelle
1
Wie haben Sie im Protokoll über die Android-Version erfahren?
Android-Entwickler
3
@androiddeveloper Ich habe mir die Daten angesehen, an denen jede Zeile hinzugefügt wurde. Um genau zu wissen, welche Schriftarten in einer bestimmten Version verfügbar sind, besuchen Sie system_fonts.xml für diese Version, z. B. für Lollipop: android.googlesource.com/platform/frameworks/base/+/…
Newtonx
Mein einziger Kritikpunkt ist, dass es nicht alphabetisch sortiert ist: p Aber trotzdem! Dies sollte die beste Antwort sein! Danke dir!
T. Woody
9

Soweit mir bekannt ist, können Sie keine benutzerdefinierten Schriftarten in XML oder Designs deklarieren. Normalerweise erstelle ich benutzerdefinierte Klassen, die die Textansicht erweitern und bei der Instanziierung ihre eigene Schriftart festlegen, und verwende diese in meinen Layout-XML-Dateien.

dh:

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

und

<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" />
ausgelöst
quelle
1
Dies kann Sie viel Speicher in einem Recycling-
Blick