如何在XML中使用指定的字体重量
问题描述:
使用Fonts in XML功能,您可以指定字体系列的各种字体重量。例如:如何在XML中使用指定的字体重量
<?xml version="1.0" encoding="utf-8"?>
<font-family xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<font android:font="@font/archivo_narrow_regular" android:fontWeight="400" android:fontStyle="normal"
app:font="@font/archivo_narrow_regular" app:fontWeight="400" app:fontStyle="normal"/>
<font android:font="@font/archivo_narrow_regular_italic" android:fontWeight="400" android:fontStyle="italic"
app:font="@font/archivo_narrow_regular_italic" app:fontWeight="400" app:fontStyle="italic"/>
<font android:font="@font/archivo_narrow_medium" android:fontWeight="500" android:fontStyle="normal"
app:font="@font/archivo_narrow_medium" app:fontWeight="500" app:fontStyle="normal"/>
<font android:font="@font/archivo_narrow_medium_italic" android:fontWeight="500" android:fontStyle="italic"
app:font="@font/archivo_narrow_medium_italic" app:fontWeight="500" app:fontStyle="italic"/>
<font android:font="@font/archivo_narrow_semibold" android:fontWeight="600" android:fontStyle="normal"
app:font="@font/archivo_narrow_semibold" app:fontWeight="600" app:fontStyle="normal"/>
<font android:font="@font/archivo_narrow_semibold_italic" android:fontWeight="600" android:fontStyle="italic"
app:font="@font/archivo_narrow_semibold_italic" app:fontWeight="600" app:fontStyle="italic"/>
<font android:font="@font/archivo_narrow_bold" android:fontWeight="700" android:fontStyle="normal"
app:font="@font/archivo_narrow_bold" app:fontWeight="700" app:fontStyle="normal"/>
<font android:font="@font/archivo_narrow_bold_italic" android:fontWeight="700" android:fontStyle="italic"
app:font="@font/archivo_narrow_bold_italic" app:fontWeight="700" app:fontStyle="italic"/>
</font-family>
但我无法弄清楚如何实际使用这些权重;可以使用XML(布局/样式)文件或Java代码。它们不是fontWeight
属性可用于TextView
,并且Typeface
从ResourcesCompat.getFont(context, R.font.archivo_narrow)
创建的对象没有提及字体权重。
我意识到我可以指定特定的字体资源(即R.font.archivo_narrow_semibold
),但在font-family
中拥有fontWeight
属性有什么意义?
答
它看起来像android遵循web标准的字体管理和大小的android应用程序的大小。
“font-weight”属性用于定义字体的权重,如常规或粗体。
但是对于所有其他重量,使用从100到900的数字范围。 Web字体面临的一个挑战是大多数Web浏览器都不能正确支持粗体字以外的字体粗细。下面的图表说明权重的可能映射到数字的定义:
100 Extra Light or Ultra Light
200 Light or Thin
300 Book or Demi
400 Normal or Regular
500 Medium
600 Semibold, Demibold
700 Bold
800 Black, Extra Bold or Heavy
900 Extra Black, Fat, Poster or Ultra Black
你可以阅读更多关于字体的粗细here
cc_montserrat_bold.xml
<?xml version="1.0" encoding="utf-8"?>
<font-family xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<font
android:font="@font/montserrat_bold"
android:fontStyle="normal"
android:fontWeight="700"
app:font="@font/montserrat_bold"
app:fontStyle="normal"
app:fontWeight="700" />
<font
android:font="@font/montserrat_bolditalic"
android:fontStyle="italic"
android:fontWeight="700"
app:font="@font/montserrat_bolditalic"
app:fontStyle="italic"
app:fontWeight="700" />
</font-family>
cc_montserrat_regular .xml
<?xml version="1.0" encoding="utf-8"?>
<font-family xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<font
android:font="@font/montserrat_regular"
android:fontStyle="normal"
android:fontWeight="400"
app:font="@font/montserrat_regular"
app:fontStyle="normal"
app:fontWeight="400" />
<font
android:font="@font/montserrat_italic"
android:fontStyle="italic"
android:fontWeight="400"
app:font="@font/montserrat_italic"
app:fontStyle="italic"
app:fontWeight="400" />
</font-family>
科特林用法:
val textView = dialog.findViewById<TextView>(android.R.id.message) as TextView
val typeface = ResourcesCompat.getFont(context,R.font.cc_montserrat_regular)
textView.typeface = typeface
的Android项目截图:
答
编辑:这不是一个解决方案的要求:/
我找到了Typeface.Builder类,我认为是你想要的。不幸的是,它只能从API级别26以上获得。也许compat库很快就会出现。
https://developer.android.com/reference/android/graphics/Typeface.Builder.html
Typeface.Builder buidler = new Typeface.Builder("your_font_file.ttf");
builder.setFontVariationSettings("'wght' 700, 'slnt' 20, 'ital' 1");
builder.setWeight(700); // Tell the system that this is a bold font.
builder.setItalic(true); // Tell the system that this is an italic style font.
Typeface typeface = builder.build();
是的,但我怎么* *使用各种字体的权重? – Bryan
不要重量来单独识别字体?你能给我举个例子吗? –
我可以在''标签中指定'font-weight'属性,但是我找不到在我的代码中任何地方引用* font-weight属性的方法。我可以*设定*重量,我不能*使用*重量)。有一个['textStyle'](https://developer.android.com/reference/android/widget/TextView.html#attr_android:textStyle)属性,但你只能指定'bold','italic'或'bold | italic'。例如,没有“semibold”。 – Bryan