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

作者站长头像
站长
· 阅读数 18

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

<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 方法。后续可能会用到。

回复
1个回答
avatar
test
2024-06-28

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();

        // ...
    }
}
回复
likes
适合作为回答的
  • 经过验证的有效解决办法
  • 自己的经验指引,对解决问题有帮助
  • 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
  • 询问内容细节或回复楼层
  • 与题目无关的内容
  • “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容