Fonts in 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
属性を持つことのポイントは何ですか?
新しい静的な create(Typeface family, int weight, boolean italic)
メソッドがAPIレベル28に getWeight()
インスタンスメソッドとともに追加されました。これにより、最終的にJavaコードでfontWeight
属性を使用できるようになります。ただし、APIレベル28以上の場合のみ、サポートライブラリに類似物は見つかりませんでした。 。
これは便利であり、fontWeight
属性が過去に目的を果たさなかったことを示していますが、XMLスタイリングで重みを使用できるようになりたいと思っています。
@FlorianWaltherが指摘したように、 textFontWeight
属性はまさに私が探していたものです。この属性は明らかにAPIレベル28で追加されましたが、 最近まで文書化されていませんでした 。
すべての重みが同じXMLファイルにあることを確認し(私の質問のように)、fontFamily
属性と共に属性を使用します。
<TextView Android:id="@+id/weightedTextView"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:fontFamily="@font/archivo_narrow"
Android:textFontWeight="700"/>
私が知る限り、この属性は上記のAPIレベル28でのみ使用できますが、サポートライブラリで対応するものが見つかった場合は更新します。
Androidのようなフォント管理とサイジングのためのWeb標準に従うAndroidアプリ。
「font-weight」プロパティは、通常の太字などのフォントの太さを定義するために使用されます。
ただし、他のすべての重みには、100〜900の数値範囲が使用されます。 Webフォントの課題の1つは、ほとんどの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
フォントの太さについて詳しく読むことができます こちら
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>
Kotlinの使用法:
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 Projectスクリーンショット:
ここで、Android studioで異なるフォントの太さを使用する方法
app/src/main/res/layout/you_awesome_layout.xml
を開きますDesign tab
を選択しますTextView
を開き、右側のメニューの下部にあるView all attributes
を選択しますfontFamily
]ドロップダウンを開き、More Fonts…
を選択しますYouFontFamilyName
を選択Regular/Bold/Semibold/Black/WhateverStyleYouHaveThere
出来上がり、これがあなたが望むものを達成する唯一の方法だと思います
編集:これはリクエストの解決策ではありません:/
私はあなたが望むものだと思うTypeface.Builderクラスを見つけました。残念ながら、APIレベル26以降でのみ利用可能です。おそらく互換ライブラリがすぐに登場するでしょう。
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();