我正在使用带有TextView工厂的TextSwitcher。我想将我在TextSwitcher上设置的样式传递给TextViews。
TextSwitcher没有3个arg构造函数。
是否可以从属性集中获取style属性?
XML
<com.my.TextSwitcher
style="@style/My.TextView.Style"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
爪哇
public class MyTextSwitcher extends TextSwitcher {
public MyTextSwitcher(Context context, AttributeSet attrs) {
super(context, attrs);
int style = attrs.getAttributeIntValue("", "style", 0); // I tried this to no avail
setFactory(new MyTextViewFactory(context, attrs, style));
}
private static class MyTextViewFactory implements ViewFactory {
private final Context context;
private final AttributeSet attrs;
private final int style;
public MyTextViewFactory(Context context, AttributeSet attrs, int style) {
this.context = context;
this.attrs = attrs;
this.style = style;
}
@Override
public View makeView() {
return new TextView(context, attrs, style);
}
}
}
是使我自己的自定义属性传递样式的唯一答案吗?我不能使用内置样式标签?
答案 0 :(得分:1)
另一种方法是用XML声明TextView,但是这样可以减少我可以拥有的TextView数量的灵活性。
<com.my.TextSwitcher
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="@style/My.TextView.Style"
android:text="@string/some_text" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="@style/My.TextView.Style"
android:text="@string/some_other_text" />
</com.my.TextSwitcher>
答案 1 :(得分:1)
您可以使用以下方法检索style
属性(并将其传递给内部视图)
attrs.getStyleAttribute()
或其等价物(如文档所述):
getAttributeResourceValue(null, "style")