Java代码中的“android:fontFamily =”sans-serif-light“相当于什么?

我的问题很简单:

在我的每个textview中,我正在使用该属性

android:fontFamily="sans-serif-light" 

在后置慧聪设备上提供华丽外观。

不幸的是,这不适用于每个部件和我的Spinners,我需要覆盖适配器。

 @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:不,我不想在资产文件夹里放一个字体,我只想用系统一个。

应该可以用setTypeface()Typeface.create()

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

请参阅文档 :

创build一个给定姓氏的字体对象,以及选项样式信息。 如果名称传递为null,则将select“默认”字体。 可以查询得到的字体对象( getStyle() )来发现它的“真实”风格特征。

请注意,过分使用Typeface.create()对您的内存不利,正如此评论所述 。 build议的Hashtable是一个很好的解决scheme,但是你不得不稍微修改它,因为你没有从资产创build你的字体。

在我看来,仍然有一种方法可以在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); } 

这将是可能的通过使用

TextView类的setTypeface(Typeface tf, int style)方法。

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

dynamic的,你可以使用这个在xml中设置类似于android:fontFamily的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)); 

这些是所使用的默认字体系列的列表,使用任何这个replace双引号string“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中 ,您可以参考有关默认字体的更多信息