web-dev-qa-db-ja.com

XMLのフォントに指定された重みを使用する方法

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属性はなく、 TypefaceResourcesCompat.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スタイリングで重みを使用できるようになりたいと思っています。

34
Bryan

@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でのみ使用できますが、サポートライブラリで対応するものが見つかった場合は更新します。

4
Bryan

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スクリーンショット:

enter image description here

18

ここで、Android studioで異なるフォントの太さを使用する方法

  1. app/src/main/res/layout/you_awesome_layout.xmlを開きます
  2. Design tabを選択します
  3. コンポーネントツリーパネルで、TextViewを開き、右側のメニューの下部にあるView all attributesを選択します
  4. [属性]パネルで[fontFamily]ドロップダウンを開き、More Fonts…を選択します
  5. ファミリーYouFontFamilyNameを選択
  6. スタイルを選択Regular/Bold/Semibold/Black/WhateverStyleYouHaveThere

出来上がり、これがあなたが望むものを達成する唯一の方法だと思います

1
Wackaloon

編集:これはリクエストの解決策ではありません:/

私はあなたが望むものだと思う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();
0
kassim