标签列表控件的使用介绍
支持点击事件监听
step1: D:\workspace\LabelViewDemoTwo\app\src\main\res\values\strings.xml
<resources>
<string name="app_name">LabelViewDemo</string>
<item name="tag_key_data" type="id" />
<item name="tag_key_position" type="id" />
</resources>
step2: D:\workspace\LabelViewDemoTwo\app\src\main\res\values\attrs.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="LabelsView">
<attr name="selectType" format="enum">
<enum name="NONE" value="1" />
<enum name="SINGLE" value="2" />
<enum name="SINGLE_IRREVOCABLY" value="3" />
<enum name="MULTI" value="4" />
</attr>
<attr name="labelGravity">
<!-- Push object to the top of its container, not changing its size. -->
<flag name="top" value="0x30" />
<!-- Push object to the bottom of its container, not changing its size. -->
<flag name="bottom" value="0x50" />
<!-- Push object to the left of its container, not changing its size. -->
<flag name="left" value="0x03" />
<!-- Push object to the right of its container, not changing its size. -->
<flag name="right" value="0x05" />
<!-- Place object in the vertical center of its container, not changing its size. -->
<flag name="center_vertical" value="0x10" />
<!-- Grow the vertical size of the object if needed so it completely fills its container. -->
<flag name="fill_vertical" value="0x70" />
<!-- Place object in the horizontal center of its container, not changing its size. -->
<flag name="center_horizontal" value="0x01" />
<!-- Grow the horizontal size of the object if needed so it completely fills its container. -->
<flag name="fill_horizontal" value="0x07" />
<!-- Place the object in the center of its container in both the vertical and horizontal axis, not changing its size. -->
<flag name="center" value="0x11" />
<!-- Grow the horizontal and vertical size of the object if needed so it completely fills its container. -->
<flag name="fill" value="0x77" />
<!-- Additional option that can be set to have the top and/or bottom edges of
the child clipped to its container's bounds.
The clip will be based on the vertical gravity: a top gravity will clip the bottom
edge, a bottom gravity will clip the top edge, and neither will clip both edges. -->
<flag name="clip_vertical" value="0x80" />
<!-- Additional option that can be set to have the left and/or right edges of
the child clipped to its container's bounds.
The clip will be based on the horizontal gravity: a left gravity will clip the right
edge, a right gravity will clip the left edge, and neither will clip both edges. -->
<flag name="clip_horizontal" value="0x08" />
<!-- Push object to the beginning of its container, not changing its size. -->
<flag name="start" value="0x00800003" />
<!-- Push object to the end of its container, not changing its size. -->
<flag name="end" value="0x00800005" />
</attr>
<attr name="maxSelect" format="integer" />
<attr name="minSelect" format="integer" />
<attr name="maxLines" format="integer" />
<attr name="maxColumns" format="integer" />
<attr name="isIndicator" format="boolean" />
<attr name="labelTextColor" format="reference|color" />
<attr name="labelTextSize" format="dimension" />
<attr name="labelTextWidth" format="dimension">
<enum name="fill_parent" value="-1" />
<enum name="match_parent" value="-1" />
<enum name="wrap_content" value="-2" />
</attr>
<attr name="labelTextHeight" format="dimension">
<enum name="fill_parent" value="-1" />
<enum name="match_parent" value="-1" />
<enum name="wrap_content" value="-2" />
</attr>
<attr name="labelTextPadding" format="dimension" />
<attr name="labelTextPaddingLeft" format="dimension" />
<attr name="labelTextPaddingTop" format="dimension" />
<attr name="labelTextPaddingRight" format="dimension" />
<attr name="labelTextPaddingBottom" format="dimension" />
<attr name="lineMargin" format="dimension" />
<attr name="wordMargin" format="dimension" />
<attr name="labelBackground" format="reference|color" />
<attr name="singleLine" format="boolean" />
<attr name="isTextBold" format="boolean" />
</declare-styleable>
</resources>
step3: D:\workspace\LabelViewDemoTwo\app\src\main\res\layout\activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#cccccc"
android:orientation="vertical">
<com.example.labelviewdemotwo.LabelsView
android:id="@+id/btnLabels"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:minHeight="25dp"
android:padding="5dp"
app:isIndicator="true"
app:labelBackground="#433f3f"
app:labelTextColor="#ffffff"
app:labelTextPaddingBottom="5dp"
app:labelTextPaddingLeft="10dp"
app:labelTextPaddingRight="10dp"
app:labelTextPaddingTop="5dp"
app:labelTextSize="14sp"
app:lineMargin="10dp"
app:selectType="SINGLE"
app:wordMargin="10dp" />
</LinearLayout>
step4: D:\workspace\LabelViewDemoTwo\app\src\main\res\drawable\default_label_bg.xml
<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<stroke
android:width="1dp"
android:color="#656565" />
<corners android:radius="5dp" />
<solid android:color="@android:color/white" />
</shape>
step5: D:\workspace\LabelViewDemoTwo\app\src\main\java\com\example\labelviewdemotwo\TestBean.java
package com.example.labelviewdemotwo;
/**
* Depiction:
* Author:lry
* Date:2018/1/20
*/
public class TestBean {
private String name;
private int id;
public TestBean(String name, int id) {
this.name = name;
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
@Override
public String toString() {
return "TestBean{" +
"name='" + name + '\'' +
", id=" + id +
'}';
}
}
step6: D:\workspace\LabelViewDemoTwo\app\src\main\java\com\example\labelviewdemotwo\MainActivity.java
package com.example.labelviewdemotwo;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
import java.util.ArrayList;
public class MainActivity extends AppCompatActivity {
private LabelsView labelsView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
labelsView = findViewById(R.id.btnLabels);
ArrayList<TestBean> testList = new ArrayList<>();
testList.add(new TestBean("Android", 1));
testList.add(new TestBean("IOS", 2));
testList.add(new TestBean("前端", 3));
testList.add(new TestBean("后台", 4));
testList.add(new TestBean("微信开发", 5));
testList.add