android 如何自定义视图属性和获取自定属性值?

我有一个年龄筛选的可选按钮:

<com.google.android.flexbox.FlexboxLayout
  style="@style/fragment_home_drawer_flexbox"
  android:onClick="@{(view) -> vm.ageItemClickHandle(view)}">
  <TextView
          style="@style/fragment_home_drawer_search_item_text"
          android:layout_marginStart="0dp"
          android:text="不限"
          app:value=""
  />
  <TextView
          style="@style/fragment_home_drawer_search_item_text"
          android:text="18-25"
          app:value="18-25"
  />
  <TextView
          style="@style/fragment_home_drawer_search_item_text"
          android:text="26-30"
          app:value="18-25"
  />
  <TextView
          style="@style/fragment_home_drawer_search_item_text"
          android:text="31-35"
          app:value="31-35"
  />
  <TextView
          style="@style/fragment_home_drawer_search_item_text"
          android:text="36-40"
          app:value="31-35"
  />
</com.google.android.flexbox.FlexboxLayout>

上述点击不同的文本会触发不同条件的年龄搜索。如何给 TextView 设置自定义属性?不能通过 android:tag 方式设置,因为这个可用于 findViewWithTag 方法。后续可能会用到。

阅读 2.8k
1 个回答

attrs.xml:

<resources>
    <declare-styleable name="CustomTextView">
        <attr name="value" format="string" />
    </declare-styleable>
</resources>

布局文件:

<com.google.android.flexbox.FlexboxLayout
    style="@style/fragment_home_drawer_flexbox"
    android:onClick="@{(view) -> vm.ageItemClickHandle(view)}">

    <TextView
        style="@style/fragment_home_drawer_search_item_text"
        android:layout_marginStart="0dp"
        android:text="不限"
        app:value=""
    />
    <TextView
        style="@style/fragment_home_drawer_search_item_text"
        android:text="18-25"
        app:value="18-25"
    />
 
</com.google.android.flexbox.FlexboxLayout>

获取自定义属性值:

public void ageItemClickHandle(View view) {
    if (view instanceof TextView) {
        TextView textView = (TextView) view;
        TypedArray typedArray = getContext().obtainStyledAttributes(textView, R.styleable.CustomTextView);
        String value = typedArray.getString(R.styleable.CustomTextView_value);
        typedArray.recycle();

        // ...
    }
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题