In der Antwort auf diese Frage führt der Benutzer Werte für android:fontFamily
und 12 Varianten auf (siehe unten). Woher stammen diese Werte? Die Dokumentation für android:fontFamily
führt diese Informationen nirgends auf (ich habe hier und hier nachgesehen). Die Zeichenketten sind in der Android-Datei styles.xml an verschiedenen Stellen aufgeführt, aber wie lassen sich diese der Roboto-Schriftart zuordnen?
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 mit diesem
android:textStyle="normal|bold|italic"
12 Varianten sind möglich:
- Normal
- Kursiv
- Fett
- Fett-kursiv
- Hell Light-italic > * Light-italic
- Thin
- Dünn-kursiv > Dünn-kursiv Condensed regular > Condensed regular Condensed kursiv > Condensed kursiv Condensed bold Condensed fett-kursiv > Condensed fett-kursiv
In der Datei styles.xml
in der Anwendung, an der ich arbeite, hat jemand dies als Schriftfamilie angegeben, und ich bin mir ziemlich sicher, dass das falsch ist:
<item name="android:fontFamily">Roboto-Regular.ttf</item>
Ich möchte das Thema für unsere App korrekt einrichten (wozu auch die korrekte Verwendung von fontFamily gehört) und alle Redundanzen in einigen der Stile entfernen, die erstellt wurden, bevor ich mir die Datei angesehen habe.
Woher stammen diese Werte? In der Dokumentation zu android:fontFamily sind diese Informationen nirgends aufgeführt
Sie sind in der Tat nicht in der Dokumentation aufgeführt. Aber sie werden hier unter dem Abschnitt 'Schriftfamilien' erwähnt. Das Dokument listet alle neuen öffentlichen APIs für Android Jelly Bean 4.1 auf.
In der Datei styles.xml in der Anwendung, an der ich arbeite, hat jemand diese als Schriftfamilie aufgeführt, und ich bin mir ziemlich sicher, dass das falsch ist:
Ja, das'ist falsch. Sie referenzieren nicht die Schriftartdatei, sondern den Namen der Schriftart, der in dem oben verlinkten Dokument angegeben ist. In diesem Fall hätte es so lauten müssen:
<item name="android:fontFamily">sans-serif</item>
Wie in der verlinkten Antwort bereits erwähnt, sind 12 Varianten möglich:
Regular (Standard):
<item name="android:fontFamily">sans-serif</item>
<item name="android:textStyle">normal</item>
Italienisch:
<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>
Bold-italic:
<item name="android:fontFamily">sans-serif</item>
<item name="android:textStyle">bold|italic</item>
Light:
<item name="android:fontFamily">sans-serif-light</item>
<item name="android:textStyle">normal</item>
Light-italic:
<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>
Kondensierte Normalschrift:
<item name="android:fontFamily">sans-serif-condensed</item>
<item name="android:textStyle">normal</item>
Kondensiert kursiv:
<item name="android:fontFamily">sans-serif-condensed</item>
<item name="android:textStyle">italic</item>
Kondensiert fett:
<item name="android:fontFamily">sans-serif-condensed</item>
<item name="android:textStyle">bold</item>
Kondensiert fett-kursiv:
<item name="android:fontFamily">sans-serif-condensed</item>
<item name="android:textStyle">bold|italic</item>
Medium:
<item name="android:fontFamily">sans-serif-medium</item>
<item name="android:textStyle">normal</item>
Medium-italic:
<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>
Zur schnellen Orientierung: So sehen sie alle aus:
Auf der Seite Material Design Typography finden Sie Demos für einige dieser Schriftarten und Vorschläge zur Auswahl von Schriftarten und Stilen.
Für Codeschnüffler: fonts.xml
ist die endgültige und ständig wachsende Liste der Android-Schriftarten.
Setzen Sie die Attribute android:fontFamily
und android:textStyle
, z.B.
<!-- Roboto Bold -->
<TextView
android:fontFamily="sans-serif"
android:textStyle="bold" />
auf die gewünschten Werte 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 von fonts.xml
abgeleitet. Der Name und Stil jeder Schriftart ist in fonts.xml aufgeführt, z.B.
<family name="serif-monospace">
<font weight="400" style="normal">CutiveMono.ttf</font>
</family>
serif-monospace
ist also die Schriftfamilie, und normal
ist der Stil.
Anhand des log der fonts.xml und der früheren system_fonts.xml können Sie sehen, wann die einzelnen Schriften hinzugefügt wurden:
Soweit ich weiß, können Sie keine benutzerdefinierten Schriftarten in Xml oder Themen deklarieren. Ich in der Regel nur benutzerdefinierte Klassen erweitern textview, die ihre eigene Schriftart auf Instanziierung und verwenden Sie diese in meinem 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" />