私の質問は非常に簡単です:
私のすべてのテキストビューで、現在属性を使用しています
Android:fontFamily="sans-serif-light"
ポストHCデバイスでゴージャスな外観を提供します。
残念ながら、これはすべてのウィジェットで機能するわけではありません。スピナーの場合、アダプターを上書きする必要があります。
@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つを使用したいだけです。
setTypeface()
とTypeface.create()
で可能になるはずです:
_convertView.setTypeface(Typeface.create("sans-serif-light", Typeface.NORMAL));
_
Docs を参照してください:
ファミリ名とオプションスタイル情報を指定して書体オブジェクトを作成します。名前にnullが渡された場合、「デフォルト」フォントが選択されます。結果の書体オブジェクトを照会して(
getStyle()
)、その「実際の」スタイルの特徴を確認できます。
このコメント で述べられているように、Typeface.create()
を過度に使用すると記憶に悪いことに注意してください。 推奨Hashtable は良い解決策ですが、アセットから書体を作成しないため、少し変更する必要があります。
Android 4.1(APIレベル16)およびサポートライブラリ26以降
Res-> font folderを使用している場合、次のように使用できます。
val typeface = ResourcesCompat.getFont(Context, R.font.YOUR_FONT)
TextView.setTypeface(typeface)
私の意見では、メモリの問題なしに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);
}
これを使用して、xml:でAndroid:fontFamilyのようなフォントファミリを動的に設定できます。
For Custom font:
TextView tv = ((TextView) v.findViewById(R.id.select_item_title));
Typeface face=Typeface.createFromAsset(getAssets(),"fonts/mycustomfont.ttf");
tv.setTypeface(face);
For Default font:
tv.setTypeface(Typeface.create("sans-serif-medium",Typeface.NORMAL));
これらはデフォルトのフォントファミリーのリストです。二重引用符文字列を置き換えることでこれを使用します "sans-serif-medium"
FONT FAMILY TTF FILE
1 casual ComingSoon.ttf
2 cursive DancingScript-Regular.ttf
3 monospace DroidSansMono.ttf
4 sans-serif Roboto-Regular.ttf
5 sans-serif-black Roboto-Black.ttf
6 sans-serif-condensed RobotoCondensed-Regular.ttf
7 sans-serif-condensed-light RobotoCondensed-Light.ttf
8 sans-serif-light Roboto-Light.ttf
9 sans-serif-medium Roboto-Medium.ttf
10 sans-serif-smallcaps CarroisGothicSC-Regular.ttf
11 sans-serif-thin Roboto-Thin.ttf
12 serif NotoSerif-Regular.ttf
13 serif-monospace CutiveMono.ttf
「mycustomfont.ttf」はttfファイルです。 Pathはsrc/assets/fonts/mycustomfont.ttfにあります、これでデフォルトのフォントの詳細を参照できます デフォルトのフォントファミリ
オプション1-API 26以降
// Jave
Typeface typeface = getResources().getFont(R.font.myfont);
textView.setTypeface(typeface);
// Kotlin
val typeface = resources.getFont(R.font.myfont)
textView.typeface = typeface
オプション2-API 16以降
// Java
Typeface typeface = ResourcesCompat.getFont(context, R.font.myfont);
// Kotlin
val typeface = ResourcesCompat.getFont(context, R.font.myfont)
Androidデベロッパーガイド で完全な期限切れを確認してください。
を使用することで可能になります
TextView
クラスのsetTypeface(Typeface tf, int style)
メソッド。
spinner_text.setTypeface(Typeface.SANS_SERIF,Typeface.NORMAL);