TagView引用笔记

#build.gradle

In your project root path build.gradle file, add this:

allprojects {
    repositories {
        ...
        maven { url "https://jitpack.io" }
    }
}

And in your module path build.gradle file, add this:

dependencies {
    compile 'com.github.onlynight:TagLayout:1.2.0'
}

#Sample Code

xml layout file:

<com.github.onlynight.taglayout.library.TagLayout
    android:id="@+id/tagLayout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:maxSelectCount="none"/>

java controller file:

private TagLayout tagLayout;
private TagAdapter adapter;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    tagLayout = (TagLayout) findViewById(R.id.tagLayout);
    initAdapter();
    setSelectMode();
    setSelect();
    setListener();
}

private void initAdapter() {
    List<Tag> data = new ArrayList<>();
    for (int i = 0; i < 20; i++) {
        data.add(new Tag(getResources().getString(R.string.tag) + (i + 1)));
    }
    adapter = new TagAdapter(this);
    adapter.addTags(data);
    tagLayout.setAdapter(adapter);
}

private void setSelectMode() {
    tagLayout.setSelectMode(TagLayout.SELECT_MODE_SINGLE);
    // this method is the same as setSelectMode();
    // tagLayout.setMaxSelectCount(1);
}

private void setSelect() {
    List<Integer> selected = new LinkedList<>();
    for (int i = 0; i < 6; i++) {
        selected.add(14 + i);
    }
    tagLayout.setSelect(selected);
}

private void setListener() {
    tagLayout.setOnTagItemSelectedListener(new TagLayout.OnTagItemSelectedListener() {
        @Override
        public void onSelected(boolean selected, int currentSelected, List<Integer> allSelected) {
            String showStr = "";
            if (selected) {
                showStr = "select item " + currentSelected;
            } else {
                showStr = "cancel select item " + currentSelected;
            }
            Toast.makeText(MainActivity.this, showStr, Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onCanNotSelectMore(boolean selected, int currentSelected, List<Integer> allSelected) {
            Toast.makeText(MainActivity.this,
                    "the MAX select item is " + tagLayout.getMaxSelectCount(),
                    Toast.LENGTH_SHORT).show();
        }
    });
}

You need a adapter extends BaseAdapter just like ListView’s Adapter.

#XML property explain

<declare-styleable name="TagLayout">

    <!-- set the max select count;
    the default value is 1, it means you can select one item at the same time.-->
    <attr name="maxSelectCount" format="integer|enum">
        <enum name="all" value="-1"/>
        <enum name="single" value="1"/>
        <enum name="none" value="0"/>
    </attr>

    <!-- is the all item in one line, the default value is false -->
    <attr name="singleLine" format="boolean"/>

    <!-- set the max item in one line the default is -1,
    that means view will auto calculate the child in one line.-->
    <attr name="maxItemsInOneLine" format="integer"/>

    <!-- if the item has equal width, the default is false.
    this property only when you set maxItemsInOneLine property,
    then this will effect-->
    <attr name="isItemsEqualWidth" format="boolean"/>
</declare-styleable>

#API explain

/**
 * To set this listener you can listen item select action and
 * listen there're no more tag can be selected
 *
 * @param onTagItemSelectedListener
 */
public void setOnTagItemSelectedListener(OnTagItemSelectedListener onTagItemSelectedListener);

/**
 * get the max select count
 *
 * @return
 */
public int getMaxSelectCount();

/**
 * set the base adapter
 *
 * @param adapter
 */
public void setAdapter(BaseAdapter adapter);

/**
 * clear all the selected item.
 */
public void clearSelect();

/**
 * get selected item id.
 *
 * @return a list of selected item's id.
 */
public List<Integer> getSelected();

/**
 * set item state to selected.
 *
 * @param items the items you want to be set select.
 */
public void setSelect(List<Integer> items);

/**
 * set the select mode.
 *
 * @param selectModeOrMaxSelectCount {@link TagLayout.SELECT_MODE_ALL} can select all.</p>
 *                                   {@link TagLayout.SELECT_MODE_NONE} can select none.</p>
 *                                   {@link TagLayout.SELECT_MODE_SINGLE} can select one.</p>
 *                                   or you can set the max select count you want.</p>
 */
public void setSelectMode(int selectModeOrMaxSelectCount);

/**
 * set the tag layout max select count.</p>
 * this method is the same as {@link TagLayout#setSelectMode(int)}
 *
 * @param maxSelectCount it is bigger than 0,</p>
 *                       the -1 is means you can select all tag item.</p>
 *                       {@link TagLayout.SELECT_MODE_ALL} can select all.</p>
 *                       {@link TagLayout.SELECT_MODE_NONE} can select none.</p>
 *                       {@link TagLayout.SELECT_MODE_SINGLE} can select one.</p>
 */
public void setMaxSelectCount(int maxSelectCount);

原文地址https://github.com/onlynight/TagLayout

已标记关键词 清除标记
表情包
插入表情
评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页