6 Star 0 Fork 0

hihopeorg / LabelsView

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
README.md 9.98 KB
一键复制 编辑 原始数据 按行查看 历史
shaojunye 提交于 2021-07-15 16:25 . update README

LabelsView

本项目是基于开源项目donkingliang/LabelsView进行ohos化的移植和开发的,可以通过项目标签以及github地址(https://github.com/donkingliang/LabelsView )追踪到原项目版本。

项目介绍

  • 项目名称:LabelsView标签列表控件
  • 所属系列:ohos的第三方组件适配移植
  • 项目移植状态:完成
  • 调用差异:无
  • 项目作者和维护人:hihope
  • 联系方式:hihope@hoperun.com
  • 原项目Doc地址:https://github.com/donkingliang/LabelsView
  • 原项目基线版本:v1.6.5 ,sha1: 29396ede3a40556b7c05706dc247ea77f6624f0a
  • 功能介绍:LabelsView标签列表控件,可以设置标签的选中效果。 可以设置标签的选中类型:不可选中、单选、限数量多选和不限数量多选等, 并支持设置必选项、单行显示、最大显示行数等功能
  • 编程语言:Java
  • 外部依赖:无

效果展示

安装教程

方案一:

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”即引用成功。

方案二:
  1. 在工程的build.gradle的allprojects中,添加HAR所在的Maven仓地址:
 repositories {
     maven {
         url 'http://106.15.92.248:8081/repository/Releases/' 
     }
 }
  1. 在应用模块的build.gradle的dependencies闭包中,添加如下代码:
 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();

版本迭代

  • v1.0.0

目前支持功能如下

- 不可选中
- 单选(可反选)
- 单选(不可反选)
- 多选
- 多选(最多5个)
- 多选(最少1个)
- 多选(1,2必选)
- 指示器模式
- 取消选中
- 点击

版权和许可信息

Apache License, Version 2.0

1
https://gitee.com/hihopeorg/LabelsView.git
git@gitee.com:hihopeorg/LabelsView.git
hihopeorg
LabelsView
LabelsView
master

搜索帮助