• Stars
    star
    533
  • Rank 83,238 (Top 2 %)
  • Language
    Java
  • Created about 6 years ago
  • Updated almost 2 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

🔥空祖家的堆叠标签(以下碎念:一开始起名字“StackLabel”没想太多结果被人吐槽Stack是整齐堆叠的意思...........好吧这是我的锅不过现在要改也来不及了,好用就行了...吧?

Kongzue StackLabel

Kongzue StackLabel 是堆叠标签组件,适合快速完成需要堆叠标签的场景,例如“搜索历史”、“猜你喜欢”等功能。

Kongzue StackLabel Maven License Homepage

Demo预览图如下:

StackLabel

从 1.1.3 版本起,亦可实现多选效果:

StackLabel

Demo下载地址:http://beta.kongzue.com/stacklabel

优势

  • 轻松易使用,快速创建,满足绝大多数堆叠标签使用场景。

StackLabel 使用方法

MavenCentral 源

最新版本: StackLabel Release
  1. 在 project 的 build.gradle 文件中找到 allprojects{} 代码块添加以下代码:
allprojects {
    repositories {
        google()
        mavenCentral()      //增加 mavenCentral 仓库
    }
}

⚠️请注意,使用 Android Studio 北极狐版本(Arctic Fox)创建的项目,需要您前往 settings.gradle 添加上述 jitpack 仓库配置。

  1. 在 app 的 build.gradle 文件中找到 dependencies{} 代码块,并在其中加入以下语句:
implementation "com.kongzue.stacklabel:StackLabel:1.2.0"

Jitpack 源

最新版本: Jitpack.io 查看最新编译版本
  1. 在 project 的 build.gradle 文件中找到 allprojects{} 代码块添加以下代码:
allprojects {
    repositories {
        google()
        jcenter()
        maven { url 'https://jitpack.io' }      //增加 jitPack Maven 仓库
    }
}

⚠️请注意,使用 Android Studio 北极狐版本(Arctic Fox)创建的项目,需要您前往 settings.gradle 添加上述 jitpack 仓库配置。

  1. 在 app 的 build.gradle 文件中找到 dependencies{} 代码块,并在其中加入以下语句:
implementation "com.github.kongzue.StackLabel:StackLabel:1.1.8"

JCenter 源

  1. 从 Maven 仓库或 jCenter 引入: Maven仓库:
<dependency>
  <groupId>com.kongzue.stacklabel</groupId>
  <artifactId>stacklabelview</artifactId>
  <version>1.1.9</version>
  <type>pom</type>
</dependency>

Gradle: 在dependencies{}中添加引用:

implementation 'com.kongzue.stacklabel:stacklabelview:1.1.9'
  1. 从XML布局文件创建:
<com.kongzue.stacklabelview.StackLabel xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/stackLabelView"
    android:layout_width="match_parent"
    android:layout_height="120dp"
    app:textColor="#e6000000"
    app:itemMargin="4dp"
    app:paddingHorizontal="12dp"
    app:paddingVertical="8dp"
    app:deleteButton="false"
    app:textSize="12dp"
    app:labels="标签1,标签2,标签3,标签4"
    />

其中支持的自定义属性解释如下:

字段 含义 类型
app:textColor 标签文本颜色 ColorInt
app:itemMargin 标签外边距 int(像素)
app:itemMarginHorizontal 标签外横向边距 int(像素)
app:itemMarginVertical 标签外纵向边距 int(像素)
app:paddingHorizontal 标签内左右间距 int(像素)
app:paddingVertical 标签内上下间距 int(像素)
app:deleteButton 默认是否显示删除按钮 boolean
app:textSize 标签文本字号 int(像素)
app:deleteButtonImage 删除图标 resId(资源id,例如@mipmap/img_delete)
app:labelBackground Label背景图 resId(资源id,例如@mipmap/img_delete)
app:selectMode 选择模式开关 boolean
app:selectBackground 选中的Label背景图 resId(资源id,例如@drawable/rect_label_bkg_select_normal)
app:selectTextColor 选中标签文本颜色 ColorInt
app:maxSelectNum 最大选择数量 int
app:minSelectNum 最小选择数量 int
app:labels 预设置标签 String
app:maxLines 最大可显示行数 int
  • 备注:预设置标签必须以英文“,”分隔才可生效
  1. 添加内容:

StackLabel 目前仅支持纯文本标签表现,您可以将要显示的 String 字符串文本添加为 List 集合设置给 StackLabel,就会呈现想要的内容,范例如下:

labels = new ArrayList<>();
labels.add("花哪儿记账");
labels.add("给未来写封信");
labels.add("密码键盘");
labels.add("抬手唤醒");
labels.add("Cutisan");
labels.add("记-专注创作");
labels.add("我也不知道我是谁");
labels.add("崩崩崩");
labels.add("Android");
labels.add("开发");
stackLabelView.setLabels(labels);

也可以使用 String 集合创建:

stackLabelView.setLabels(new String[]{"花哪儿记账","给未来写封信","密码键盘","抬手唤醒"});

另外在 1.1.8 版本中,加入了以下方法可动态添加:

stackLabelView.addLabel("新的标签");

要实现标签点击,则需要设置点击监听器:

stackLabelView.setOnLabelClickListener(new OnLabelClickListener() {
    @Override
    public void onClick(int index, View v, String s) {
        Toast.makeText(MainActivity.this, "点击了:" + s, Toast.LENGTH_SHORT).show();
    }
});

删除模式

您可以在代码中使用 setDeleteButton(boolean) 控制 StackLabel 删除模式的开关:

stackLabelView.setDeleteButton(ture);

当 DeleteButton 开启时,点击任何标签即应删除该标签:

stackLabelView.setOnLabelClickListener(new OnLabelClickListener() {
    @Override
    public void onClick(int index, View v, String s) {
        if (stackLabelView.isDeleteButton()) {      //是否开启了删除模式
            //删除并重新设置标签
            labels.remove(index);
            stackLabelView.setLabels(labels);
        } else {
            Toast.makeText(MainActivity.this, "点击了:" + s, Toast.LENGTH_SHORT).show();
        }
    }
});

另外在 1.1.8 版本中,加入了以下方法可动态删除:

stackLabelView.remove(1);        //删除第1个索引的标签

stackLabelView.remove("标签2");   //删除名为“标签2”的标签

选择模式

从 1.1.2 版本起,新增了选择模式。

开启选择模式可以从 XML 布局中加入属性设置:

app:selectMode="true"

也可以从代码中开启:

stackLabelView.setSelectMode(true);

通过属性 maxSelectNum 可以设置最大可选数量,当值为 <=0 时不生效。

当属性 maxSelectNum = 1 时为单选模式,选择其他 Label 会自动取消之前选中的 Label。

当属性 maxSelectNum > 1 时为多选模式,选择数量大于 maxSelectNum 值时则无法选中更多的 Label。

maxSelectNum 也可在代码中通过 get/set 方法设置。

重复点击已选中的 Label 则会取消选中状态。

选中的角标集合可以通过以下方式获取:

stackLabelView.setOnLabelClickListener(new OnLabelClickListener() {
    @Override
    public void onClick(int index, View v, String s) {
        if (stackLabelView.isSelectMode()) {
            for (int i : stackLabelView.getSelectIndexList()) {     //获取已选定集合的角标,也可通过stackLabelView.getSelectIndexArray()获取数组形式
                Log.i(">>>", "select: " + i);
            }
        }
    }
});

另外可通过 setSelectMode(boolean, List) 开启选择模式,并设置默认选中的标签;

List<String> selectLabels = new ArrayList<>();
selectLabels.add("Android");
selectLabels.add("Cutisan");
selectLabels.add("密码键盘");
stackLabelView.setSelectMode(isChecked, selectLabels);

以上,即 StackLabel 的基本使用流程。

其他方法

//判断存在
boolean isHave = stackLabelView.isHave("标签2");  //判断是否存在名为“标签2”的标签

//统计数量
int count = stackLabelView.count();              //统计所有标签数量

//重新加载全部标签
stackLabelView.reloadViews();

StackLayout 使用方法

从 1.1.3 版本起新增组件 StackLayout,它继承自 RelativeLayout,可以将自定义的子布局直接放入即可实现堆叠排列。

StackLayout

使用方法:

<com.kongzue.stacklabelview.StackLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:itemMargin="4dp">
    
    <TextView
        android:layout_width="110dp"
        android:layout_height="40dp"
        android:padding="10dp"
        android:gravity="center"
        android:background="#FFD4D4"
        android:text="文本1" />
    <TextView
        android:layout_width="120dp"
        android:layout_height="40dp"
        android:padding="10dp"
        android:gravity="center"
        android:background="#FDFFB8"
        android:text="文本2" />
        
    <!--子布局-->
        
</com.kongzue.stacklabelview.StackLayout>

目前仅支持 itemMargin 属性调整子布局间距。

开源协议

Copyright Kongzue StackLabel

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

  http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

更新日志

v1.1.9:

  • 新增 maxLines 属性限定可显示的最大行数。

v1.1.8:

  • 新增 isHave(string label)count()reloadViews() 等方法,使用方法详见“其他方法”;
  • 新增 addLabel(...)remove(...) 方法方便动态添加删除子标签;
  • 更改了子布局排列方式,使用 layout 方法设置布局;
  • 更改了宽度计算方式,彻底修复单标签长度超出屏幕的问题;

v1.1.7:

  • 对单标签长度超出屏幕的问题进行了修复,目前使用了锁最大宽度的限制方式。

v1.1.6:

  • 新增 app:itemMarginVertical 和 app:itemMarginHorizontal 属性,可自定义 Label 上下间距;
  • 新增 setLabels(String[] arrays) 方便使用集合创建;
  • 修复选中标签文字颜色设置纯白色无效的问题;

v1.1.5:

  • 修复了取消选择时文字颜色依然是选择状态的问题;
  • 新增 app:minSelectNum 属性,用于设定最小选中数量;

v1.1.4:

  • 新增方法 setSelectMode(boolean, List) 开启选择模式,并设置默认选中的标签;
  • 新增属性 selectTextColor 控制选中文本颜色;

v1.1.3:

  • 新增组件 StackLayout;

v1.1.2:

  • 新增了选择模式;

v1.1.1:

  • 增加了判空避免空指针问题;

v1.1.0:

  • 新增属性 deleteButtonImage 和 labelBackground 设置属性;

v1.0:

  • 全新发布;

More Repositories

1

DialogX

💬 DialogX dialog box component library, easy to use, more customizable, more scalable, easy to achieve a variety of dialog boxes. DialogX对话框组件库,更加方便易用,可自定义程度更高,扩展性更强,轻松实现各种对话框、菜单和提示效果,更有Material You、iOS、MIUI等主题扩展可选
Java
1,809
star
2

DialogV3

🔥空祖家的对话框工具V3版,集成三种风格+夜间模式对话框,以及等待、提示、分享等特色对话框,支持花式自定义
Java
1,258
star
3

Dialog

🔥空祖家的对话框工具
Java
733
star
4

BaseFramework

🔥BaseFramework是一款基础适配框架,包含沉浸式适配、对 Activity、Fragment 以及 Adapter 的封装,并提供了一些诸如权限申请、跳转、延时操作、提示、日志输出等小工具,以方便快速构建 Android App
Java
467
star
5

BaseOkHttpV3

🔥OkHttp的二次封装库,提供各种快速使用方法以及更为方便的扩展功能。提供更高效的Json请求和解析工具以及文件上传下载封装,HTTPS和Cookie操作也更得心应手。
Java
202
star
6

Tabbar

🔥空祖家的导航栏工具
Java
142
star
7

DialogXSample

DialogX 计划提供模块扩展包库 这个库目的在于实现一些常用的模块功能,例如BottomDialog+地址选择、日期选择、分享对话框等半实现功能,你可以选择性的引入部分模块,配合DialogX完成功能的构建
Java
120
star
8

KongzueUpdateSDK

🔥Kongzue的App更新框架
Java
93
star
9

BTLinker

🔥空祖家的蓝牙连接封装库,适用于智能硬件蓝牙通讯
Java
69
star
10

WifiLinker

🔥空祖家的Wifi连接封装库,适用于智能硬件Wifi连接通讯
Java
61
star
11

EnjoyLife

😊开源App项目,每天一张精选倩图、一个精选小视频,一篇知乎美文
Java
45
star
12

TakePhoto

🔥Kongzue的APP拍照&相册选择工具
Java
43
star
13

WechatHelper

🔥微信 SDK 辅助组件,提供登录、支付和分享三个模块
Java
39
star
14

BaseJson

改进型 Json 解析库,快速解析 Json 为 Map 或 List 对象,甚至直接由 JsonList 创建列表可用的适配器。
Java
37
star
15

TitleBar

🔥空祖家的标题栏组件
Java
36
star
16

DBV3

🔥KongzueDB是对SQLite的封装,打通与 Json 的互转,适合轻量使用数据库的场景,半自动化快速创建表结构
Java
32
star
17

Notes

😊开源App项目,「记」——摒除杂质,专注创作
Java
31
star
18

OnePlusOxygenBusCardJumper

【闲的没事系列】用于一加7Pro氧OS调起公交卡的小工具
Java
25
star
19

HolderView

🔥用于加载过程、加载异常、加载失败、空数据的占位布局
Java
25
star
20

Runner

Kongzue Runner 旨在快速完成 App 逻辑构建,协助开发者低成本完成业务开发。提供一个独立的消息事件传递总线,不依赖 Intent 可以独立传递数据、执行事件,提供一套近乎全自动化的 ViewModel 框架,能够依据数据和 View 的对应关系自动实现数据绑定和界面适配
Java
20
star
21

UpdateUI

🔥Kongzue的App更新UI框架
Java
17
star
22

CameraXQRDecoder

此库是基于 CameraX 的二维码扫描封装、仅含基础功能(扫码、闪光灯),不包含扫码框动画,如有需要请自行实现。目的是解决以往原始 Camera 实现的扫码再较长屏幕设备上可能出现因画面纵向被拉伸导致识别率低的问题,相比于传统的 Camera,CameraX 的优势更大,启动速度响应速度都更快。
Java
17
star
23

BaseOkHttp

🔥OkHttp的二次封装,更好用,更易用,更标准
Java
15
star
24

BaseActivity

🛑Kongzue的适配布局的框架模块(已废弃,请参考https://github.com/kongzue/BaseFramework)
Java
13
star
25

DialogXStyle-Snackbar

适用于 DialogX 框架的 PopTip 组件的 Snackbar 主题包,含亮、暗色
12
star
26

Paywhere

😊花哪儿记账相关资料
HTML
10
star
27

BaseFramework-Support

🔥BaseFramework是一款基础适配框架,包含沉浸式适配、对 Activity、Fragment 以及 Adapter 的封装,并提供了一些诸如权限申请、跳转、延时操作、提示、日志输出等小工具,以方便快速构建 Android App,这个库是为了保留最后一个Support版本建立的
Java
10
star
28

BankInfo

💳银行卡号前缀和银行卡名称类型对应关系资料整理
Java
9
star
29

DebugSDK

🚫【已废弃】Kongzue的崩溃日志处理抓取工具,已合并至BaseFramework框架,不再单独更新
Java
9
star
30

ClassSeatChangeDemo

😊帮朋友做的座位调换 Demo
Java
8
star
31

DB

🚫【已废弃】请更新使用DBV3库。KongzueDB是对SQLite的封装,适合轻量使用数据库的场景,半自动化快速创建表结构
Java
7
star
32

lsDirectory

😊雷神通讯录是一款支持小型团队协作的通讯软件
Java
6
star
33

PaywhereSemanticRecognition

😊花哪儿语义识别核心模块
Java
6
star
34

SafeLayout

用来取代fitsSystemWindows的设置安全区的组件,默认实现了SafeFrameLayout、SafeLinearLayout、SafeRelativeLayout和SafeViewGroup
Java
6
star
35

AnalogTouch

😊模拟自动点击的一个APP,需要root权限,支持当机器检测功能
Java
6
star
36

Find

😊《寻》社交APP
Java
4
star
37

BuildingMapView

🛑专业领域使用的自绘地图组件
Java
4
star
38

ToFuture

给未来写封信-公开资料
HTML
3
star
39

Example

😊Kongzue全家桶实现范例
Java
3
star
40

Dome

😊A team transaction synchronization tool that can assign tasks to other members and monitor progress. More features to expand ...
Java
3
star
41

Res

🛑这里没啥东西,真的
2
star
42

Wakeup

😊抬手唤醒APP相关资料库
HTML
2
star
43

kongzue

简介
2
star
44

BaseVolley

🔥Volley的二次封装,更好用,更易用,更标准
Java
2
star
45

BaseFragment

🛑Kongzue的适配布局的框架模块(已废弃,请参考https://github.com/kongzue/BaseFramework)
Java
2
star
46

DialogXDemo

1
star
47

YTGuide

游移通
Java
1
star
48

RefreshLayout

⭐基于SwipeRefreshLayout的改良版
Java
1
star
49

ServletTest

Java
1
star
50

JdbcUtil

Java
1
star
51

Android-Notes

Android开发中遇到的一些坑,已弃,请移驾简书
GCC Machine Description
1
star
52

Preferences

🛑SharedPreferences的简易封装(已废弃,请参考https://github.com/kongzue/BaseFramework)
Java
1
star
53

MagicDayNightSwitchButton

随手照着网上看到的一个视频日夜切换按钮效果的练习作品,用到的技术是 MotionLayout
Java
1
star
54

kongzue.github.io

🚩关于开发的指导性意见,请直接访问 kongzue.github.io
HTML
1
star
55

nowShare

nowshare project
Java
1
star