• Stars
    star
    1,324
  • Rank 35,502 (Top 0.7 %)
  • Language
    Java
  • Created over 6 years ago
  • Updated over 1 year ago

Reviews

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

Repository Details

实现类似微博内容,@用户,链接高亮,@用户和链接可点击跳转,可展开和收回的TextView

ExpandableTextView

实现类似微博内容,@用户,链接高亮,@用户和链接可点击跳转,可展开和收回的TextView。觉得好用别忘了star哦,你的star是对我最大的激励

需求解决系列之-【系列工具概览】

此系列是大道至简的起始,将一系列简单恶心的操作封装起来,框架么,可以败絮其中,但一定要金絮其外!

快速使用

Gradle:

implementation 'com.github.MZCretin:ExpandableTextView:v1.6.1'

// if u use AndroidX, use the following

implementation 'com.github.MZCretin:ExpandableTextView:v1.6.1-x'

更新日志

  • 2019-07-04 12:06:06更新,如果你需要监听展开和回收的时间监听,但是不需要控件真正的执行展开和回收操作,你可以在添加展开和收回操作的时候置顶是否需要真正执行展开和回收操作,具体效果可以参考效果图第2条的第二个,依赖版本请使用tag版本v1.6.1,查看说明

    implementation 'com.github.MZCretin:ExpandableTextView:v1.6.1'
  • 2019-05-20 15:14:04更新,如果你需要展示链接但是不想让链接自动转换成"网页链接"的形式,你可以禁用自动转换功能;如果你希望知道是否满足展开/收起的条件,添加一个监听就好了,依赖版本请使用tag版本1.6.0,查看说明

    implementation 'com.github.MZCretin:ExpandableTextView:v1.6.0'
  • 2019-03-14 10:25:57更新,修复在有些手机上偶尔会出现白屏,加载不出内容的情况,依赖版本请使用tag版本1.5.3

    implementation 'com.github.MZCretin:ExpandableTextView:v1.5.3'
  • 2018-10-09 17:20:45 更新,新增对展开和回收的点击事件监听,依赖版本请使用tag版本v1.5.2

    implementation 'com.github.MZCretin:ExpandableTextView:v1.5.2'
  • 2018-09-28 09:37:28 更新,优化了将"展开"和"收回"固定最右显示时中间空格数量的计算方式,依赖版本请使用tag版本v1.5.1,查看说明

    implementation 'com.github.MZCretin:ExpandableTextView:v1.5.1'
  • 2018-09-27 09:18:14 更新

    • 修复了不添加事件监听,点击链接会直接打开百度页面;
    • 在demo中添加自定义设置显示文本的功能,您可以自己设置需要显示的文本,然后查看对应的显示效果;
    • 新增了"展开"和"收回"按钮始终居右的功能,具体效果请查看效果图的第9条,依赖版本请使用tag版本v1.5,查看说明
    implementation 'com.github.MZCretin:ExpandableTextView:v1.5'
  • 2018-09-22 23:32:16 更新,新增自定义规则解析,具体效果请查看效果图的第10条,依赖版本请使用tag版本v1.4,查看说明

    implementation 'com.github.MZCretin:ExpandableTextView:v1.4'
  • 2018-09-21 11:51:24 更新,优化了demo的代码逻辑和注释

  • 2018-09-21 08:45:13 更新,修复了自定义设置展开和收回内容无效的问题,依赖请使用tag版本v1.3.1

    implementation 'com.github.MZCretin:ExpandableTextView:v1.3.1'
  • 2018-09-20 16:31:13 更新

    • 一、提供了在RecyclerView中使用的时候,对之前状态的保存的功能支持,查看说明
    • 二、新增对@用户和链接的处理,用户可以设置不对这些内容进行识别,仅仅使用展开和收回功能;
    • 三、优化的demo的效果,请大家重新下载apk进行体验。
    • 四、如果你没有设置对链接的监听,会默认调用系统浏览器打开链接
    • 五、支持语言国际化
    • 六、最新版请使用v1.3
  • 2018-09-03 17:39:56 修复一些bug,链接sheSpan位置错误,未生成release,等待下次修复其他bug一起打tag依赖包,使用请本地依赖使用

  • 2018-08-31 17:31:56 优化设置padding对宽度造成的影响,依赖请使用tag版本v1.2

    implementation 'com.github.MZCretin:ExpandableTextView:v1.2'
  • 2018-08-31 11:21:22 在V1.0的基础上进行了优化,依赖请使用tag版本v1.1

    implementation 'com.github.MZCretin:ExpandableTextView:v1.1'

实现效果:

下面是RecyclerView中的样式,可以保留之前展开和收回的状态

使用方式:

Step 1. Add the JitPack repository to your build file

Add it in your root build.gradle at the end of repositories:

allprojects {
		repositories {
			...
			maven { url 'https://jitpack.io' }
		}
	}

Step 2. Add the dependency

dependencies {
	        implementation 'com.github.MZCretin:ExpandableTextView:请使用最新版本'
	}

demo下载

Demo下载

扫描二维码下载:

代码说明

  • 以下属性都可以在xml中设置
        <!--保留的行数-->
        <attr name="ep_max_line" format="integer" />
        <!--是否需要展开-->
        <attr name="ep_need_expand" format="boolean" />
        <!--是否需要收起 这个是建立在开启展开的基础上的-->
        <attr name="ep_need_contract" format="boolean" />
        <!--是否需要@用户 -->
        <attr name="ep_need_mention" format="boolean" />
        <!--是否需要对链接进行处理 -->
        <attr name="ep_need_link" format="boolean" />
        <!--是否需要动画-->
        <attr name="ep_need_animation" format="boolean" />
				<!--是否需要将连接转换成网页链接显示 默认为true-->
        <attr name="ep_need_convert_url" format="boolean" />
        <!--是否需要自定义规则-->
        <attr name="ep_need_self" format="boolean" />
        <!--收起的文案-->
        <attr name="ep_contract_text" format="string" />
        <!--展开的文案-->
        <attr name="ep_expand_text" format="string" />
        <!--展开的文字的颜色-->
        <attr name="ep_expand_color" format="color" />
        <!--收起的文字的颜色-->
        <attr name="ep_contract_color" format="color" />
        <!--在收回和展开前面添加的内容的字体颜色-->
        <attr name="ep_end_color" format="color" />
        <!--链接的文字的颜色-->
        <attr name="ep_link_color" format="color" />
        <!--@用户的文字的颜色-->
        <attr name="ep_mention_color" format="color" />
        <!--自定义规则的文字的颜色-->
        <attr name="ep_self_color" format="color" />
        <!--链接的图标-->
        <attr name="ep_link_res" format="reference"/>
        <!--是否需要永远将展开或者收回放置在最后边-->
        <attr name="ep_need_always_showright" format="boolean" />

        //布局文件中使用 可选 也可以在代码中设置
        <com.ctetin.expandabletextviewlibrary.ExpandableTextView
                    android:id="@+id/ep_01"
                    android:layout_width="fill_parent"
                    android:layout_height="wrap_content"
                    android:layout_margin="15dp"
                    android:lineSpacingExtra="4dp"
                    android:textSize="14sp"
                    <!--开始展开的行数 -->
                    app:ep_max_line="4"
                    <!--是否需要对链接进行识别-->
                    app:ep_need_link="true"
                    <!--是否需要对@用户进行识别-->
                    app:ep_need_mention="true"
                    <!--是否需要收回功能-->
                    app:ep_need_contract="true"
                    <!--是否需要展开和收回的动画-->
                    app:ep_need_animation="true"
                    <!--展开文字的颜色-->
                    app:ep_expand_color="@color/colorAccent"
                    <!--收回的文字描述-->
                    app:ep_contract_text="收回"
                    <!--在展开前可添加tips tips的文字颜色-->
                    app:ep_end_color="@color/colorAccent"
                    <!--展开的文字描述-->
                    app:ep_expand_text="展开"
                    <!--被识别出来的链接的颜色-->
                    app:ep_link_color="@color/colorAccent"
                    <!--被识别出来的链接的前面的图标资源-->
                    app:ep_link_res="@color/colorAccent"
                    <!--展开的文字的颜色-->
                    app:ep_contract_color="@color/colorAccent"
                    <!--@用户的文字的颜色-->
                    app:ep_mention_color="@color/colorAccent"
										<!--是否需要将连接转换成网页链接显示-->
										app:ep_need_convert_url="false"
                    <!--是否需要自定义规则-->
                    app:ep_need_self="true"
                    <!--自定义规则的文字的颜色-->
                    app:ep_self_color="@color/colorAccent"
                    <!--是否需要永远将展开或者收回放置在最后边-->
                    app:ep_need_always_showright="true"
                    <!--是否需要展开功能-->
                    app:ep_need_expand="false" />
  • java代码
        /**
        *   正常的使用
        */
        ExpandableTextView expandableTextView = findViewById(R.id.ep_01);
        //需要显示的内容
        String yourText = "  我所认识的中国,强大、友好。@奥特曼 “一带一路”经济带带动了沿线国家的经济发展,促进我国与他国的友好往来和贸易发展,可谓“双赢”。http://www.baidu.com 自古以来,中国以和平、友好的面孔示人。汉武帝派张骞出使西域,开辟丝绸之路,增进与西域各国的友好往来。http://www.baidu.com 胡麻、胡豆、香料等食材也随之传入中国,汇集于中华美食。@RNG 漠漠古道,驼铃阵阵,这条路奠定了“一带一路”的基础,让世界认识了中国。";
        //将内容设置给控件
        expandableTextView.setContent(yourText);
        //xml中的属性也可以通过代码设置 比如
        expandableTextView.setmNeedExpend(true);
        //还有很多。。。。
        //添加点击监听
        expandableTextView.setLinkClickListener(new ExpandableTextView.OnLinkClickListener() {
            @Override
            public void onLinkClickListener(LinkType linkType, String content,String selfContent) {
                //根据类型去判断
                if (type.equals(LinkType.LINK_TYPE)) {
                    Toast.makeText(MainActivity.this, "你点击了链接 内容是:" + content, Toast.LENGTH_SHORT).show();
                } else if (type.equals(LinkType.MENTION_TYPE)) {
                    Toast.makeText(MainActivity.this, "你点击了@用户 内容是:" + content, Toast.LENGTH_SHORT).show();
                } else if (type.equals(LinkType.SELF)) {
                    Toast.makeText(MainActivity.this, "你点击了自定义规则 内容是:" + content + " " + selfContent, Toast.LENGTH_SHORT).show();
                }
            }
        });
        //添加展开和收回操作
        expandableTextView.setExpandOrContractClickListener(type -> {
            if (type.equals(StatusType.STATUS_CONTRACT)) {
                Toast.makeText(MainActivity.this, "收回操作", Toast.LENGTH_SHORT).show();
            } else {
                Toast.makeText(MainActivity.this, "展开操作", Toast.LENGTH_SHORT).show();
            }
        });
				//监听是否初始化完成 在这里可以获取是否支持展开/收回
        expandableTextView.setOnGetLineCountListener(new ExpandableTextView.OnGetLineCountListener() {
            @Override
            public void onGetLineCount(int lineCount, boolean canExpand) {
                Toast.makeText(MainActivity.this, "行数:" + lineCount + "  是否满足展开条件:" + canExpand, Toast.LENGTH_SHORT).show();
            }
        });
				//添加展开和收回操作 只触发点击 不真正触发展开和收回操作
        expandableTextView.setExpandOrContractClickListener(type -> {
            if (type.equals(StatusType.STATUS_CONTRACT)) {
                Toast.makeText(MainActivity.this, "收回操作,不真正触发收回操作", Toast.LENGTH_SHORT).show();
            } else {
                Toast.makeText(MainActivity.this, "展开操作,不真正触发展开操作", Toast.LENGTH_SHORT).show();
            }
        },false);

新特性额外说明

V1.6.1:2019-07-04 12:02:05 更新了如下特性 版本v1.6.1+可以正常使用

如果你需要监听展开和回收的时间监听,但是不需要控件真正的执行展开和回收操作,你可以在添加展开和收回操作的时候置顶是否需要真正执行展开和回收操作,具体效果可以参考效果图第2条的第二个控件效果:

//添加展开和收回操作 只触发点击 不真正触发展开和收回操作
        expandableTextView.setExpandOrContractClickListener(type -> {
            if (type.equals(StatusType.STATUS_CONTRACT)) {
                Toast.makeText(MainActivity.this, "收回操作,不真正触发收回操作", Toast.LENGTH_SHORT).show();
            } else {
                Toast.makeText(MainActivity.this, "展开操作,不真正触发展开操作", Toast.LENGTH_SHORT).show();
            }
        },false);

V1.6:2019-05-20 15:19:10 更新了如下特性 版本v1.6+可以正常使用

如果你需要展示链接但是不想让链接自动转换成"网页链接"的形式,你可以禁用自动转换功能,具体效果可以参考效果图第11条;如果你希望知道是否满足展开/收起的条件,添加一个监听就好了:

//监听是否初始化完成 在这里可以获取是否支持展开/收回
        views[10].setOnGetLineCountListener(new ExpandableTextView.OnGetLineCountListener() {
            @Override
            public void onGetLineCount(int lineCount, boolean canExpand) {
                Toast.makeText(MainActivity.this, "行数:" + lineCount + "  是否满足展开条件:" + canExpand, Toast.LENGTH_SHORT).show();
            }
        });

V1.5: 2018-09-27 09:20:28 更新了如下特性 版本v1.5+可以正常使用

如果你需要将"展开"和"收回"始终居右显示,你需要开启它,具体效果可以参考效果图第9条

//需要先开启始终靠右显示的功能
views[8].setNeedAlwaysShowRight(true);

//或者在xml中开启
app:ep_need_always_showright="true"

V1.4:2018-09-22 23:32:16 更新了如下特性 版本v1.4+可以正常使用

如果你觉得目前@用户和网页链接两种形式并不能完全满足你的业务,那么我提供了一个新的自定义规则给你,让你可以更加灵活的去适应自己的业务。

比如上面实现效果的第9条中,我们通过自定义规则对文字中的"--习大大"和"Github地址"进行了自定义规则,让其高亮显示并且可以添加触发相应的事件。

具体做法是:

  • 在一段文字中将你需要处理的文字做上特殊标记,,标记的规则就是[显示的内容](动作),这个标记的规则可以交给后台给你处理,或者你自己处理也可以。
  • 比如上文中的"Github地址",那么标记后就是这样的 [Github地址]( https://github.com/MZCretin/ExpandableTextView ),这样在控件中显示的就只是Github地址,可以点击,当点击之后,会将"显示的内容"和"动作"都通过接口回调的方式回传给调用者自己处理;
  • 再比如上文中的"--习大大",那么标记后就是这样的 [--习大大](schema_jump_userinfo),这样控件中只会显示"--习大大",然后根据后面的动作去做处理,比如这是一个用户,可以跳转到这个用户的个人详情页面。
  • 默认不会对自定义规则进行解析,如需开启,请开启此功能:
    <!--是否需要自定义规则-->
    app:ep_need_self="true"
    

V1.3:2018-09-20 16:31:13 更新了如下特性 版本v1.3+可以正常使用

如果你希望在RecyclerView(或者ListView)中使用,请认真阅读demo中在RecyclerView中的使用,细节都在注释中。

如果你需要在列表中保留之前的展开或收回状态,特殊说明的有以下几点:

  • 一、实现 ExpandableStatusFix
  • 二、在你的model中定义一个 private StatusType status;
  • 三、实现对应的方法,将你刚刚定义的status返回,
  • 四、并在给ExpandableTextView设置内容之前,调用bind方法

实现思路讲解

简书: 【需求解决系列之三】Android 自定义可展开收回的ExpandableTextView

掘金: 【需求解决系列之三】Android 自定义可展开收回的ExpandableTextView

More Repositories

1

RollToolsApi

一个提供开发中常用数据的一个稳定聚合Api接口源,运行于独立服务器,免费,且长期维护,会持续添加新的接口!【只fork不star是很没品的】
2,990
star
2

AutoUpdateProject

App 内部更新 提供12种更新的样式 支持Android全系统版本 支持自定义UI 断点续传
Java
1,016
star
3

WifiTransfer-master

Android下WIFI隔空apk安装
Java
599
star
4

duanzile-open-api

🔥段子乐开放平台接口,开放段子乐APP所有接口,快来做一个你自己的APP吧~🔥【只Fork不Star是很没品的】
338
star
5

WheelSurfDemo

自定义Android原生转盘抽奖demo
Java
256
star
6

LotteryHelper

一个用于给福彩自动对号的工具,给福彩拍照后自动识别上面的号码,自动从网络获取本期获奖号码,与识别后的号码进行匹配,对比出改彩票是否有中奖号码
Java
196
star
7

ExternalMapUtils

app打开外部百度地图和高德地图进行简单的地图展示 路线规划...
Java
76
star
8

DragDemo

需求解决系列一之移动卡片实现答题功能,移动卡片插入到题干之中完成答题
Java
69
star
9

InputPswDemo

弹出自定义支付密码输入框
Java
60
star
10

CitySelect

城市选择 首字母索引滑动定位 城市搜索
Java
51
star
11

FileBatchModification

Android资源文件批量分类处理 具体使用请看博客
Java
47
star
12

RelativeLayoutDemo

自定义可旋转、平移、缩放的可改变颜色标签
Java
43
star
13

PushHeadDemo

弹出输入框的时候 使用动画效果将输入框网上推
Java
41
star
14

FanPermission

动态权限申请库,总是觉得现有的权限请求框架在使用的过程中没有那么方便,所以自己弄一个给自己用,越简单越好
Java
41
star
15

SuperExpandableListView

ExpandableListView 点击每个group的时候,请求child的数据,然后加载完再展开
Java
39
star
16

ScanCode

一个打开扫描二维码或者条形码的插件,封装好了基础功能,可以开启闪光灯,打开相册扫描,扫描成功之后的提示音,使用zBar而非zXing,个人感觉zXing识别成功率低
Java
32
star
17

HttpUrlConnectionUtilDemo

写小demo的时候,用Android成熟的网络框架有些大炮打蚊子,所以用最简单的方式写了一个网络工具类,注意,这个只是工具类...
Java
31
star
18

WebViewUtils

通用webview跳转封装 一行代码实现webView跳转 支持页面样式配置
Java
27
star
19

ClearEditTextProject

一个三种方式实现的ClearEditText,可清除内容的EditText
Java
25
star
20

Money

毕业设计-记账软件-帮同学做的
Java
19
star
21

SuperCalendarDemo

日历,仿团贷网回款日历!滚动选择月份!开发中使用的一个效果,先写个demo,后面集成进项目中
Java
17
star
22

HealthManager

App健康管理组件 Android 健康提醒组件
Kotlin
17
star
23

RollPickerView

日期选择器,可选择开始日期和结束日期两个日期
Java
15
star
24

CMAppDownload

基于点猫科技工具项目开源~
Java
12
star
25

GestureViewDemo

设置手势密码 手势图案
Java
10
star
26

CollegeHelper

大学毕业设计-校园小助手
Java
9
star
27

AndroidUtilsProject

Android 常用工具类开发维护 主要解决日常开发中频繁且无味的需求开发
Java
8
star
28

LotteryDemo

一个点击按钮滚动抽奖的demo
Java
8
star
29

JetpackStartup

Jetpack 系列之 Startup
Kotlin
7
star
30

open-door

用小爱同学打开楼下门禁系统~
Java
7
star
31

StudyDoc

学习过程中梳理出来的文档
6
star
32

MoneyManager

毕业设计-记账软件
Java
6
star
33

CarChargeServer

毕业设计-滴滴打车软件
Java
6
star
34

CreateNewProjectDemo

app架构 Retrofit+dagger+Okhttp 基类封装大多数操作 只专注业务逻辑
Java
6
star
35

QuickMapping

给测试用的对比图片上文字与标准文档文字是否一致的工具
Java
6
star
36

Caipu1

毕业设计-菜谱软件
Java
5
star
37

Mp3Player

java语言 基于 RollToolsApi 开发的简陋版音乐播放器
Java
5
star
38

estore

javaweb 新手项目 商城项目
Java
4
star
39

WebStudy

前端学习文档
HTML
4
star
40

MZCretin

4
star
41

CretinDocs

3
star
42

RedPacketPlugin

Java
3
star
43

Eva-Translate

Eva-全平台国际化翻译解决方案
3
star
44

RootNoAndroidXProject

Android Studio 升级之后每次创建应用都是默认必须支持Androidx的,不是很友好,想要改成不是Androidx的还是比较麻烦的,所以创建一个不是Androidx的空项目,用于日常的demo和一些依赖库的实现!
Java
3
star
45

CalendarViewDemo

自定义简单的日历控件
Java
2
star
46

AutoRefreshListView

上拉自动加载数据的Listview
Java
2
star
47

java-translate-server

Android/iOS 国际化翻译系统 后端解决方案
Kotlin
2
star
48

vue-translate-web

Android/iOS 国际化翻译系统 管理后台解决方案
Vue
1
star
49

Eva-Convert

企业常用转换能力解决方案-pdf转换-wps转换-图片转换-等等
1
star