我有一个自定义TextView,实现与this blog post中基本相同,默认为某种字体,但使用textStyle
属性为普通,粗体或斜体样式设置不同的字体。
构造函数检查设置字体的textStyle
。
MyFontTextView.java
public MyFontTextView(Context context, AttributeSet attrs) {
int textStyle = attrs.getAttributeIntValue(ANDROID_SCHEMA, "textStyle", Typeface.NORMAL);
switch (textStyle) {
case Typeface.BOLD: // bold
Typeface boldFont = Typeface.createFromAsset(Application.getContext().getAssets(), "fonts/boldFont.otf");
super.setTypeface(boldFont);
...
}
}
问题如果我在继承的textStyle
中设置style
,它就不会检测到它
getAttributeIntValue(ANDROID_SCHEMA, "textStyle", Typeface.NORMAL)
始终返回我的默认Typeface.NORMAL
:
<style name="TextView_MyInfo">
<item name="android:textStyle">bold</item>
<item name="android:textAllCaps">true</item>
</style>
myfragment.xml
<com.myapp.views.MyFontTextView
android:id="@+id/myinfo_name"
style="@style/TextView_MyInfo"
tools:text="John Smith" />
没有设置大胆。
但是如果我改为将textStyle
直接设置在这样的元素上:
<com.myapp.views.MyFontTextView
android:id="@+id/myinfo_name"
android:textStyle="bold"
tools:text="John Smith" />
它会检测到它,getAttributeIntValue(ANDROID_SCHEMA, "textStyle", Typeface.NORMAL)
就像它应该的那样返回Typeface.BOLD。我也知道它正在正确加载styles.xml
属性,因为它始终获得textAllCaps
属性以及其他一些属性。
我是否需要以不同于直接设置属性的方式访问styles.xml
中设置的属性?
根据this answer,如果我至少可以使用style="@style/TextView_MyInfo"
设置样式标记,我可以使用它来检查那里定义的textStyle
。
其他信息: