android:fontFamily の有効な値は、/system/etc/system_fonts.xml(4.x) または /system/etc/fonts.xml(5.x) で定義されています。ただし、デバイスの製造元が変更する可能性があるため、fontFamily の値を設定して実際に使用されるフォントは、指定したデバイスの上記のファイルに依存します。
AOSP では、Arial フォントは有効ですが、「Arial」ではなく「arial」を使用して定義する必要があります (例: android:fontFamily="arial" )。Kitkat の system_fonts.xml をざっと見てみましょう
<family>
<nameset>
<name>sans-serif</name>
<name>arial</name>
<name>helvetica</name>
<name>tahoma</name>
<name>verdana</name>
</nameset>
<fileset>
<file>Roboto-Regular.ttf</file>
<file>Roboto-Bold.ttf</file>
<file>Roboto-Italic.ttf</file>
<file>Roboto-BoldItalic.ttf</file>
</fileset>
</family>
/////////////////////////////////////////////// ////////////////////////
レイアウトで「フォント」を定義するための 3 つの関連する xml 属性があります。 android:fontFamily、android:typeface、およびandroid:textStyleです。"fontFamily" と "textStyle" または "typeface" と "textStyle" の組み合わせを使用して、テキスト内のフォントの外観を変更できます。単独で使用することもできます。次のようなTextView.javaのコード スニペット:
private void setTypefaceFromAttrs(String familyName, int typefaceIndex, int styleIndex) {
Typeface tf = null;
if (familyName != null) {
tf = Typeface.create(familyName, styleIndex);
if (tf != null) {
setTypeface(tf);
return;
}
}
switch (typefaceIndex) {
case SANS:
tf = Typeface.SANS_SERIF;
break;
case SERIF:
tf = Typeface.SERIF;
break;
case MONOSPACE:
tf = Typeface.MONOSPACE;
break;
}
setTypeface(tf, styleIndex);
}
public void setTypeface(Typeface tf, int style) {
if (style > 0) {
if (tf == null) {
tf = Typeface.defaultFromStyle(style);
} else {
tf = Typeface.create(tf, style);
}
setTypeface(tf);
// now compute what (if any) algorithmic styling is needed
int typefaceStyle = tf != null ? tf.getStyle() : 0;
int need = style & ~typefaceStyle;
mTextPaint.setFakeBoldText((need & Typeface.BOLD) != 0);
mTextPaint.setTextSkewX((need & Typeface.ITALIC) != 0 ? -0.25f : 0);
} else {
mTextPaint.setFakeBoldText(false);
mTextPaint.setTextSkewX(0);
setTypeface(tf);
}
}
コードから次のことがわかります。
- 「fontFamily」が設定されている場合、「typeface」は無視されます。
- 「typeface」には、標準の有効な値と限定された有効な値があります。実際、値は「normal」、「sans」、「serif」、および「monospace」であり、system_fonts.xml(4.x) または fonts.xml(5.x) で見つけることができます。実際には、"normal" と "sans" の両方がシステムのデフォルト フォントです。
- 「fontFamily」は組み込みフォントのすべてのフォントを設定するために使用できますが、「typeface」は「sans-serif」「serif」と「monospace」(世界の 3 つの主要なフォント タイプのカテゴリ)の典型的なフォントのみを提供します。 .
- 「textStyle」のみを設定すると、実際にデフォルトのフォントと指定されたスタイルを設定します。有効な値は「normal」「bold」「italic」「bold | italic」です。