TextSwitcher - 获取style属性并将其传递给另一个视图

时间:2014-01-24 17:21:47

标签: android android-ui android-theme

我正在使用带有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);
        }
    }
}

是使我自己的自定义属性传递样式的唯一答案吗?我不能使用内置样式标签?

2 个答案:

答案 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")