本项目是基于开源项目donkingliang/LabelsView进行ohos化的移植和开发的,可以通过项目标签以及github地址(https://github.com/donkingliang/LabelsView )追踪到原项目版本。
1.下载har包LabelsView.har。 2.启动 DevEco Studio,将下载的har包,导入工程目录“entry->libs”下。 3.在moudle级别下的build.gradle文件中添加依赖,在dependences标签中增加对libs目录下har包的引用。
dependencies {
implementation fileTree(dir: 'libs', include: ['*.har'])
……
}
4.在导入的har包上点击右键,选择“Add as Library”对包进行引用,选择需要引用的模块,并点击“OK”即引用成功。
repositories {
maven {
url 'http://106.15.92.248:8081/repository/Releases/'
}
}
dependencies {
implementation 'com.donkingliang.ohos:labels:1.0.0'
}
1.编写布局:
/**
* xml
*/
<com.donkingliang.labels.LabelsView
xmlns:app="http://schemas.huawei.com/res/ohos-auto"
ohos:id="$+id:btnLabels"
ohos:height="match_content"
ohos:width="match_parent"
ohos:min_height="25vp"
ohos:padding="5vp"
ohos:top_margin="10vp"
app:isIndicator="true"
app:labelBackground="#433f3f"//标签的背景
app:labelTextColor="#ffffff" //标签的字体颜色 可以是一个颜色值
app:labelTextPaddingBottom="5vp"//标签的上下左右边距
app:labelTextPaddingLeft="10vp"
app:labelTextPaddingRight="10vp"
app:labelTextPaddingTop="5vp"
app:labelTextSize="8fp"//标签的字体大小
app:lineMargin="10vp"//行与行的距离
app:selectType="NONE" //标签的选择类型 有单选(可反选)、单选(不可反选)、多选、不可选四种类型
app:wordMargin="10vp"//标签与标签的距离
/>
这里有两个地方需要说明一下:
1)标签的正常样式和选中样式是通过element来实现的。比如下面两个element。
<!-- 标签的背景 label_bg -->
<state-container
xmlns:ohos="http://schemas.huawei.com/res/ohos">
<!-- 标签选中时的背景 -->
<item
ohos:element="$graphic:select_red_bg"
ohos:state="component_state_selected">
</item>
<!-- 标签的正常背景 -->
<item
ohos:element="$graphic:select_black_bg"
ohos:state="component_state_empty">
</item>
</state-container>
2)标签的选择类型有四种:
NONE :标签不可选中,也不响应选中事件监听,这是默认值。
SINGLE:单选(可反选)。这种模式下,可以一个也不选。
SINGLE_IRREVOCABLY:单选(不可反选)。这种模式下,有且只有一个是选中的。默认是第一个。
MULTI:多选,可以通过设置maxSelect限定选择的最大数量,0为不限数量。maxSelect只有在多选的时候才有效。多选模式下可以设置一些标签为必选项。必选项的标签默认选中,且不能取消。
2.设置标签:
labelsView = (LabelsView) findViewById(labels);
ArrayList<String> label = new ArrayList<>();
label.add("HarmonyOS");
label.add("IOS");
label.add("前端");
label.add("后台");
label.add("微信开发");
label.add("游戏开发");
labelsView.setLabels(label); //直接设置一个字符串数组就可以了。
//LabelsView可以设置任何类型的数据,而不仅仅是String。
ArrayList<TestBean> testList = new ArrayList<>();
testList.add(new TestBean("HarmonyOS",1));
testList.add(new TestBean("IOS",2));
testList.add(new TestBean("前端",3));
testList.add(new TestBean("后台",4));
testList.add(new TestBean("微信开发",5));
testList.add(new TestBean("游戏开发",6));
labelsView.setLabels(testList, new LabelsView.LabelTextProvider<TestBean>() {
@Override
public CharSequence getLabelText(TextView label, int position, TestBean data) {
// label就是标签项,在这里可以对标签项单独设置一些属性,比如文本样式等。
//根据data和position返回label需要显示的数据。
return data.getName();
}
});
3.设置事件监听(如果需要的话)
//标签的点击监听
labelsView.setOnLabelClickListener(new LabelsView.OnLabelClickListener() {
@Override
public void onLabelClick(Text label, Object data, int position) {
//label是被点击的标签,data是标签所对应的数据,position是标签的位置。
}
});
// 标签的长按监听
labelsView.setOnLabelLongClickListener(new LabelsView.OnLabelLongClickListener() {
@Override
public boolean onLabelLongClick(Text label, Object data, int position) {
return false;
}
});
//标签的选中监听
labelsView.setOnLabelSelectChangeListener(new LabelsView.OnLabelSelectChangeListener() {
@Override
public void onLabelSelectChange(Text label, Object data, boolean isSelect, int position) {
//label是被选中的标签,data是标签所对应的数据,isSelect是是否选中,position是标签的位置。
}
});
4.设置标签选中事件拦截(如果需要的话)
当希望某个标签在特定条件下不被选中/取消选中时,可以使用事件拦截。只有用户点击改变标签选中状态时才会回调拦截,用其他方法改变时不会回调这个方法,不会被拦截。点击选中/取消选中时,拦截事件,返回true时,表示事件被拦截,不会改变标签的选中状态。
//设置标签选中状态的点击改变拦截器
labelsView.setOnSelectChangeIntercept(new LabelsView.OnSelectChangeIntercept() {
@Override
public boolean onIntercept(Text label, Object data, boolean oldSelect, boolean newSelect, int position) {
if (position == 0){
//拦截第一个标签的状态改变事件,不能选中和反选
return true;
} else {
return false;
}
}
});
5.常用方法
public void setSelects(int... positions);
public void setSelects(List<Integer> positions);
//获取选中的标签(返回的是所有选中的标签的位置)。返回的是一个Integer的数组,表示被选中的标签的下标。如果没有选中,数组的size等于0。
public ArrayList<Integer> getSelectLabels();
//获取选中的label(返回的是所有选中的标签的数据)。如果没有选中,数组的size等于0。T表示标签的数据类型。
public <T> List<T> getSelectLabelDatas();
//取消所有选中的标签。
public void clearAllSelect();
//设置标签的选择类型,有NONE、SINGLE、SINGLE_IRREVOCABLY和MULTI四种类型。
public void setSelectType(SelectType selectType);
//设置最大的选择数量,只有selectType等于MULTI时有效。
public void setMaxSelect(int maxSelect);
//设置最少的选择数量,只有selectType等于MULTI时有效。
//注意:minSelect只限制用户手动点击取消选中时的效果。调用setSelects()、clearAllSelect()等方法改变标签的选中状态时,不受minSelect影响。
public void setMinSelect(int minSelect);
//设置为指示器模式,只能看,不能手动操作。这种模式下,用户不能通过手动点击改变标签的选中状态。
//但是仍然可以通过调用setSelects()、clearAllSelect()等方法改变标签的选中状态。
public void setIndicator(boolean indicator)
//设置必选项,只有在多项模式下,这个方法才有效
public void setCompulsorys(int... positions)
public void setCompulsorys(List<Integer> positions)
//清空必选项,只有在多项模式下,这个方法才有效
public void clearCompulsorys()
//设置标签背景
public void setLabelBackgroundResource(int resId);
//设置标签的文字颜色
public void setLabelTextColor(int color);
//设置标签的文字大小(单位是px)
public void setLabelTextSize(float size);
//设置标签内边距
public void setLabelTextPadding(int left, int top, int right, int bottom);
//设置行间隔
public void setLineMargin(int margin);
//设置标签的间隔
public void setWordMargin(int margin);
// 设置最大显示行数,小于等于0则不限行数。
public void setMaxLines(int maxLines);
// 设置标签文本显示方向
public void setLabelGravity(int gravity);
// 设置是否单行显示
public void setMaxLines(int maxLines);
// 设置标签字体是否为粗体
public void setTextBold(boolean isBold);
// 获取标签的行数
public int getLines();
目前支持功能如下
- 不可选中
- 单选(可反选)
- 单选(不可反选)
- 多选
- 多选(最多5个)
- 多选(最少1个)
- 多选(1,2必选)
- 指示器模式
- 取消选中
- 点击
Apache License, Version 2.0
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。