在Java代码中,“android:fontFamily =”sans-serif-light“是什么意思?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (33)

我的问题很简单:

在我的每个文本视图中,我正在使用该属性

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

那么,有没有办法通过代码获得完全相同的结果?

提问于
用户回答回答于

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

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

请参阅文档

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

请注意,Typeface.create()所述,建议的哈希表是一个很好的解决方案,但你必须要修改一点点,因为你没有从资产创建字样。

用户回答回答于

在我看来,仍然有一种方法可以在没有任何内存问题的情况下以编程方式在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);
}

扫码关注云+社区