1. ホーム
  2. android

[解決済み] android:fontFamily="sans-serif-light "と同等の機能をJavaコードで実現するには?

2022-05-18 12:43:51

質問

私の質問は非常にシンプルです。

私のテキストビューのすべてで、私は現在、属性を使用しています。

android:fontFamily="sans-serif-light"

で、ポストHCデバイスで華やかな見栄えを提供します。

残念ながら、これはすべてのウィジェットで動作するわけではなく、私のSpinnerの場合はAdapterを上書きする必要があります。

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    //You can use the new tf here.

    if(convertView == null || convertView.getTag() == null) {
        // new view - populate 
        convertView = inflater.inflate(android.R.layout.simple_spinner_dropdown_item, parent, false);
        convertView.setTag(new Object());
    }

    CheckedTextView spinner_text=(CheckedTextView) convertView.findViewById(android.R.id.text1);
    //Typeface should be set here...
    return spinner_text;
    }
}

では、コードで全く同じ結果を得る方法はあるのでしょうか?

追記:いえ、assetフォルダに書体を入れたいわけではなく、システムのものを使いたいだけです。

どのように解決するのですか?

それは setTypeface()Typeface.create() :

convertView.setTypeface(Typeface.create("sans-serif-light", Typeface.NORMAL));

参照 資料 :

ファミリー名とオプションのスタイル情報を与えて、書体オブジェクトを作成します。 の情報を与えます。名前にnullが渡された場合、"default" フォントが選ばれます。 が選択されます。生成された書体オブジェクトは以下のように問い合わせることができます。 ( getStyle() ) をクエリして、その本当のスタイル特性が何であるかを知ることができます。

を過剰に使用することに注意してください。 Typeface.create() を多用すると、メモリに悪い影響があることは このコメント . は はハッシュテーブルを提案した は良い解決策ですが、アセットから書体を作成するわけではないので、少し修正する必要があります。