115

私の質問は非常に簡単です:

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

android:fontFamily="sans-serif-light"

ポストHCデバイスでゴージャスな外観を提供します。

残念ながら、これはすべてのウィジェットで機能するわけではなく、Spinner の場合、アダプターを上書きする必要があります。

@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;
    }
}

では、コードでまったく同じ結果を得る方法はありますか?

PS: いいえ、アセット フォルダーに書体を入れたくありません。システム 1 を使用したいだけです。

4

6 に答える 6

180

setTypeface()とで可能なはずですTypeface.create()

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

ドキュメントを参照してください:

ファミリ名とオプションのスタイル情報を指定して書体オブジェクトを作成します。名前に null が渡された場合、「デフォルト」のフォントが選択されます。結果の書体オブジェクトをクエリ ( getStyle()) して、その「実際の」スタイルの特徴を確認できます。

このコメントに記載されているように、過度に使用Typeface.create()すると記憶に悪いことに注意してください。提案されたHashtableは良い解決策ですが、アセットから書体を作成しないため、少し変更する必要があります。

于 2013-01-15T18:13:20.370 に答える
22

私の意見では、メモリの問題を発生させることなくTextView にプログラムでシステム フォントを適用する方法がまだあり、textview.setTextAppearanceメソッドを使用しています。

<style name="styleA">
    <item name="android:fontFamily">sans-serif</item>
    <item name="android:textStyle">bold</item>
    <item name="android:textColor">?android:attr/textColorPrimary</item>
</style>
<style name="styleB">
    <item name="android:fontFamily">sans-serif-light</item>
    <item name="android:textStyle">normal</item>
    <item name="android:textColor">?android:attr/textColorTertiary</item>
</style>


if(condition){
    textView.setTextAppearance(context,R.style.styleA);
}else{
    textView.setTextAppearance(context,R.style.styleB);
}
于 2016-03-30T06:43:36.863 に答える
6

を使えば可能だろう

setTypeface(Typeface tf, int style)TextViewクラスの方法。

spinner_text.setTypeface(Typeface.SANS_SERIF,Typeface.NORMAL);

于 2016-06-01T10:55:49.347 に答える