2017-10-05 188 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

相關問題