2017-10-05 69 views
4

使用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,并且TypefaceResourcesCompat.getFont(context, R.font.archivo_narrow)创建的对象没有提及字体权重。

我意识到我可以指定特定的字体资源(即R.font.archivo_narrow_semibold),但在font-family中拥有fontWeight属性有什么意义?

回答

-1

它看起来像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项目截图:

enter image description here

+0

是的,但我怎么* *使用各种字体的权重? – Bryan

+0

不要重量来单独识别字体?你能给我举个例子吗? –

+0

我可以在''标签中指定'font-weight'属性,但是我找不到在我的代码中任何地方引用* font-weight属性的方法。我可以*设定*重量,我不能*使用*重量)。有一个['textStyle'](https://developer.android.com/reference/android/widget/TextView.html#attr_android:textStyle)属性,但你只能指定'bold','italic'或'bold | italic'。例如,没有“semibold”。 – Bryan

0

编辑:这不是一个解决方案的要求:/

我找到了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(); 
+0

不,不幸的是,你只能通过'Typeface.Builder'设置重量;仍然没有办法通过创建的“字体”来引用重量。 – Bryan

+0

是的,对不起,我发现一个重量输入,并没有完全理解激动。 - 我发现你的StackOverflow试图自己弄清楚同样的事情。在通过源代码进行拖网搜索之后,我可以发现,如果您引用某个字体系列,那么如果将其指定为文本样式,则会尝试最难以得到粗体(700)的权重,否则会找到最接近400 。没有办法要求你想要的重量。希望他们很快就能投入使用,我在大多数设计中都使用了半粗体作为我的标题体重,并且有重量输入会非常有用。 – kassim

相关问题