Flexbox的封装类,用于展示标签和操作标签

描述:

Flexbox的封装类,用于展示标签和操作标签

应用截图:

FlexboxUtils

使用说明:

继承BaseTagView

定义一个TagView,继承BaseTagView,由于每一个tag的数据类型不确定,因此需要传入一个固定的数据类型满足实际需求

public class StringTagView extends BaseTagView<String> {

    public StringTagView(Context context) {
        this(context, null);
    }

    public StringTagView(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs, 0);
    }

    public StringTagView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    @Override
    public void setItem(String item) {
        super.setItem(item);
        textView.setText(item);
    }
}

继承TagAdapter

定义一个Adapter,继承TagAdapter,并实现相应的方法

public class StringTagAdapter extends TagAdapter<StringTagView, String> {

    StringTagAdapter(Context context, List<String> data) {
        this(context, data, null);
    }

    StringTagAdapter(Context context, List<String> data, List<String> selectItems) {
        super(context, data, selectItems);
    }

    /**
     * 检查item和所选item是否一样
     *
     * @param view
     * @param item
     * @return
     */
    @Override
    protected boolean checkIsItemSame(StringTagView view, String item) {
        return TextUtils.equals(view.getItem(), item);
    }

    /**
     * 检查item是否是空指针
     *
     * @return
     */
    @Override
    protected boolean checkIsItemNull(String item) {
        return TextUtils.isEmpty(item);
    }

    /**
     * 添加标签
     *
     * @param item
     * @return
     */
    @Override
    protected StringTagView addTag(String item) {
        StringTagView tagView = new StringTagView(getContext());
        tagView.setPadding(20, 20, 20, 20);

        TextView textView = tagView.getTextView();
        textView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14);
        textView.setGravity(Gravity.CENTER);

        tagView.setItemDefaultDrawable(itemDefaultDrawable);
        tagView.setItemSelectDrawable(itemSelectDrawable);
        tagView.setItemDefaultTextColor(itemDefaultTextColor);
        tagView.setItemSelectTextColor(itemSelectTextColor);
        tagView.setItem(item);
        return tagView;
    }
}

使用

在xml中,你可以使用如下配置:

<resources>
    <declare-styleable name="TagFlowLayout">
        <attr name="showHighlight" format="boolean" /> // 是否选中高亮
        <attr name="defaultDrawable" format="reference" /> // 默认标签背景
        <attr name="selectDrawable" format="reference" /> // 选中标签背景
        <attr name="defaultTextColor" format="color|reference"/> // 默认标签文字颜色
        <attr name="selectTextColor" format="color|reference" /> // 选中标签文字颜色
        <attr name="mode"> // 单选或者多选
            <enum name="MULTI" value="0" /> // 默认多选
            <enum name="SINGLE" value="1"/> // 单选
        </attr>
    </declare-styleable>
</resources>
    <zhouyou.flexbox.widget.TagFlowLayout
        android:id="@+id/flow_layout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:alignContent="flex_start"
        app:alignItems="center"
        app:dividerDrawable="@drawable/bg_flow_divider"
        app:flexDirection="row"
        app:flexWrap="wrap"
        app:justifyContent="flex_start"
        app:showDivider="beginning|middle|end"
        app:selectDrawable="@drawable/bg_flow_selected"
        app:defaultDrawable="@drawable/bg_flow_unselect"
        app:selectTextColor="@android:color/white"
        app:defaultTextColor="@color/app_green"
        app:mode="SINGLE"/>

也可以使用Java代码进行属性配置

    TagFlowLayout flowLayout = (TagFlowLayout) findViewById(R.id.flow_layout);
    flowLayout.setShowHighlight(false);
    flowLayout.setItemDefaultDrawable(R.drawable.bg_flow_unselect);
    flowLayout.setItemSelectDrawable(R.drawable.bg_flow_selected);
    flowLayout.setItemDefaultTextColor(ContextCompat.getColor(this, R.color.app_green));
    flowLayout.setItemSelectTextColor(Color.WHITE);
    flowLayout.setMode(TagFlowLayout.MODE_SINGLE_SELECT);

回调

可以使用如下回调来获取最终所选择的项目列表

    ...
    adapter.setOnSubscribeListener(new OnFlexboxSubscribeListener<String>() {
        @Override
        public void onSubscribe(List<String> selectedItem) {
        }
    });

 

源码下载:https://github.com/Kaka252/FlexboxUtils

未经允许不得转载:安度博客 » Flexbox的封装类,用于展示标签和操作标签

赞 (0)
分享到:更多 ()

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址