AndroidTagView 云标签

作者: 敲代码的本愿 | 来源:发表于2016-06-09 18:12 被阅读3537次

    介绍

    可自定义的标签视图,支持添加标签,点击,长按弹出删除对话框,以及拖拽排序。

    Github

    类似控件

    android-flowlayout
    TagCloudView

    使用

    第一步

    在build.gradle文件中添加依赖:

    dependencies {
        compile 'co.lujun:androidtagview:1.0.3'
    }
    

    第二步

    在布局中使用AndroidTagView,可以使用自定义属性。

    <co.lujun.androidtagview.TagContainerLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="0dp"
        android:padding="10dp"
        app:container_enable_drag="false"
        app:horizontal_interval="10dp"
        app:vertical_interval="10dp"
        app:tag_clickable="true"
        app:tag_theme="pure_teal" />
    

    第三步

    在代码中使用,并设置数据。

    TagContainerLayout mTagContainerLayout = (TagContainerLayout) findViewById(R.id.tagcontainerLayout);
    mTagContainerLayout.setTags(List<String> tags);
    
    效果图效果图

    属性

    以下属性均可在布局中设置,也可以通过set或get方法使用。

    名称 类型 说明
    vertical_interval dimension 垂直间隔,默认 5dp
    horizontal_interval dimension 水平间隔,默认 5dp
    container_border_width dimension TagContainerLayout 边框粗细,默认0.5dp
    container_border_radius dimension TagContainerLayout 边框圆角,默认10.0dp
    container_border_color color TagContainerLayout 边框颜色,默认 #22FF0000
    container_background_color color TagContainerLayout 背景色,默认 #11FF0000
    container_enable_drag boolean 是否可以拖拽,默认false
    container_drag_sensitivity float 拖拽灵敏度,默认 1.0f, normal
    container_gravity enum The TagContainerLayout gravity
    tag_border_width dimension 子标签 边框粗细,默认 0.5dp
    tag_corner_radius dimension 子标签 边框圆角,默认 15.0dp)
    tag_horizontal_padding dimension 子标签内部水平间距,包含左右两边,间距相同,默认20px
    tag_vertical_padding dimension 子标签内部垂直间距,包含上下两边,间距相同,默认17px
    tag_text_size dimension 子标签字体大小,默认14sp
    tag_bd_distance dimension 基线和 descent之间的距离,默认 5.5px
    tag_text_color color 子标签 字体颜色,默认 #FF666666
    tag_border_color color 子标签 边框颜色,默认 #88F44336
    tag_background_color color 子标签背景色,默认 #33F44336
    tag_max_length integer 子标签 文本长度最大值,默认 23
    tag_clickable boolean 子标签 是否可点击,默认 不可点击
    tag_theme enum 子标签 主题
    tag_text_direction enum 子标签 方向(文本方向)

    <h2 id="Themes">Themes 主题</h2>

    theme code 取值 说明
    none ColorFactory.NONE -1 自定义主题时,必须优先设置该参数
    random ColorFactory.RANDOM 0 所有标签使用随机颜色
    pure_cyan ColorFactory.PURE_CYAN 1 所有标签使用纯青色
    pure_teal ColorFactory.PURE_TEAL 2 所有标签使用纯蓝绿色

    <h2 id="Directions">Directions 方向</h2>

    direction code 取值 说明
    ltr View.TEXT_DIRECTION_LTR 3 由左到右(默认)
    rtl View.TEXT_DIRECTION_RTL 4 由右到左

    注:是标签内文本方向

    <h2 id="Gravity">Gravity</h2>

    gravity code 取值 说明
    left Gravity.LEFT 3 居左(默认)
    center Gravity.CENTER 17 居中
    right Gravity.RIGHT 5 居右

    注:是子标签在父布局中的相对位置,父布局即引用的co.lujun.androidtagview.TagContainerLayout。

    <h2 id="Methods">Methods</h2>

    1. 设置监听事件:TagView.OnTagClickListener
    mTagContainerLayout.setOnTagClickListener(new TagView.OnTagClickListener() { 
          @Override 
          public void onTagClick(int position, String text) {
               // ...点击事件
         } 
          @Override 
          public void onTagLongClick(final int position, String text) { 
              // ...长按事件
         }
    });
    
    1. 设置标签最大长度:setTagMaxLength(int max)
    mTagContainerLayout.setTagMaxLength(int max);
    
    1. 获取某个标签的文字:getTagText(int position)
    String text = mTagContainerLayout.getTagText(int position);
    
    1. 获取所有标签的文字:getTags()
    List<String> list = mTagContainerLayout.getTags();
    
    1. 可拖拽模式(container_enable_drag="true")下获取标签状态,:getTagViewState()
    /**共3种状态
    1.ViewDragHelper.STATE_IDLE             空闲状态
    2.ViewDragHelper.STATE_DRAGGING   正在拖拽状态
    3.ViewDragHelper.STATE_SETTLING     正在设置状态
    **/
    int state = mTagContainerLayout.getTagViewState();
    
    1. 设置主题,如果要自定义主题,切记先设置主题ColorFactory.NONE,然后再设置其他属性setTheme(int theme)
    // 设置自带主题
    mTagContainerLayout.setTheme(ColorFactory.PURE_CYAN);
    .
    // 设置自定义主题
    mTagContainerLayout.setTheme(ColorFactory.NONE);
    mTagContainerLayout.setTagBackgroundColor(Color.TRANSPARENT);
    
    1. 设置文本方向:setTagTextDirection(int direction)
    /**共2种方向
    1.View.TEXT_DIRECTION_LTR  由左到右
    2.View.TEXT_DIRECTION_RTL  由右到左
    **/
    mTagContainerLayout.setTagTextDirection(View.TEXT_DIRECTION_RTL);
    
    1. 设置标签的文本字体:setTagTypeface(Typeface typeface)
    Typeface typeface = Typeface.createFromAsset(getAssets(), "iran_sans.ttf");
    mTagContainerLayout.setTagTypeface(typeface);
    
    1. 设置标签,参数为 List<String>String[]setTags()
    mTagContainerLayout.setTags(List<String> tags);
    
    1. 添加单个标签(末尾):addTag(String text)
    mTagContainerLayout.addTag(String text);
    
    1. 在指定位置添加单个标签(即当前位置的标签之前),:addTag(String text, int position)
    mTagContainerLayout.addTag(String text, int position);
    
    1. 删除指定位置的标签:removeTag(int position)
    mTagContainerLayout.removeTag(int position);
    
    1. 删除所有标签:removeAllTags()
    mTagContainerLayout.removeAllTags();
    

    相关文章

      网友评论

      • 小c欧巴:怎么设置标签的个数,比如最多显示8个标签?
        敲代码的本愿:自己控制一下传入的数量不就行了吗
      • e207177c2cc5:依赖库的时候找不到对应的库怎么解决
        敲代码的本愿:github直接搜项目名,里面有写最新版本,如果还找不到,那就是网或者项目的问题
      • zp_风:只能显示一屏吗?不能上下滑动
        zp_风:@敲代码的本愿 ok,没问题,谢谢
        敲代码的本愿:套个ScrollView试试

      本文标题:AndroidTagView 云标签

      本文链接:https://www.haomeiwen.com/subject/osxsdttx.html