自定义TextView无法从styles.xml获取textStyle属性

时间:2016-03-03 20:53:47

标签: android xml

我有一个自定义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

其他信息:

  • compileSdkVersion 23
  • minSdkVersion 19
  • targetSdkVersion 22

0 个答案:

没有答案