如何从TextView获取fontFamily名称?

时间:2016-05-10 11:29:07

标签: android textview android-typeface

我想从代码中的xml获取字体系列名称attr name。 例如,我有自定义textView类:

public class TextVieww extends TextView{

    public TextVieww(Context context) {
        super(context);
    }
    public TextVieww(Context context, AttributeSet attrs) {
        super(context, attrs);
    }
    public TextVieww(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }
    public void init(Context mContext ,TextView view) {
    }
}

XML:

 <com.typefacetest.TextVieww
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="30sp"
        android:textStyle="bold"
        android:fontFamily="sans-serif-thin"
        android:text="Hello World!" />

我希望得到&#34; sans-serif-thin&#34;来自textView.class。 这个有可能?以及如何做到这一点?感谢&#39; S

1 个答案:

答案 0 :(得分:3)

如果在XML中定义了字体系列名称,则无法以编程方式获取字体系列名称,因为在XML中定义时,它在编译时映射到关联的本机字体系列,并且无法收回,不会有一些难看的反映(我将尝试找到上述声明的来源以获得完整的答案,字体的文档似乎有限。)

正如@Ashwini在评论中所提到的,你总是可以在assets文件夹下使用自定义字体,并且能够在XML文件和.java中看到它。

或者,如果你想使用原生字体系列,你可以做一些更简单,有点不雅的事情;使用TextView的android:tag字段存储字体系列名称:

在XML中:

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Hello World!"
    android:id='@+id/textView'
    android:textSize="30sp"
    android:textStyle="bold"
    android:fontFamily="@string/myFontFamily"
    android:tag="@string/myFontFamily"
/>

在res / values / strings.xml中:

<resources>
    ...
    <string name="myFontFamily">sans-serif-thin</string>
    ...
</resources>

然后您可以通过android:tag字段访问字体系列名称:

TextView textView = (TextView) findViewById(R.id.textView);
String fontFamily = String.valueOf(textView.getTag());