前言:

为了保持界面UI的整洁以及将尽可能多的内容显示在有限的空间中,往往需要将长度过长的TextView进行内容截取。本控件满足了TextView可在”完整内容”与”截取内容”两种模式下进行切换的需求,且可应用在ListView/RecyclerView中并可以动态更新内容。

截图:

静态截图如下:



android ExpandableTextView-自定义可以动态展开/收缩显示长文本的TextView_自定义

 





动态效果图可点击如下链接:

流量党慎点

项目地址: 
https://github.com/Carbs0126/ExpandableTextView

主要功能:

  1. 限制行数,行尾添加

ClickSpan

  1. ,点击可以”展开”/”收起”两种状态切换;
  2. 可使用在

ListView

  1. /

RecyclerView

  1. 中,效率较高;
  2. 可在任意时刻更新

ExpandableTextView

  1. 内容(布局显示之前或者显示之后);
  2. 可自定义行数限制,默认最多显示2行;
  3. 可自定义行尾

ClickSpan

  1. 是否显示,颜色,文字,按下的背景颜色;
  2. 可添加点击此view后是否在”展开”/”收起”状态间切换;
  3. 文字不足最大限制行数时,不截断文字,不显示末尾的”展开”/”收起”的指示标识;
  4. 可自定义行尾省略语与行尾”展开”/”收起”的指示标识之间的gap文字;

说明:

  1. 效果参考了jQuery的readmore.js,部分代码参考了ReadMoreTextView
  2. 与Github上star数最多的ExpandableTextView实现原理及UI完全不同。
  3. 暂时未添加”收缩”/”展开”时的动画效果。

优化:

  1. 解决末尾显示的指示标识文字与原来文字宽度不一致时的显示问题(如原始文字与行尾指示标识文字为不同语言)。如当结尾指示标识文字较宽时,可能会显示到下一行。以此优化UI体验。
  2. 解决末尾单词过长或者跟随标点后,换行留下的空白问题。此问题源于TextView自带的一个属性:当结尾为完整单词或者跟随标点时会连同之前的部分文字一起换行。
  3. 解决文字过短时,截取文字超出边界的问题。
  4. 解决任何时刻为

ExpandableTextView

  1. 更新文字的问题。

不具有的功能:

  1. 限制字符长度。此控件只限制最大行数,不限制字符长度;
  2. 省略标识的位置自定义。省略标识的位置暂时只能显示在行尾,不能够指定是否在”行首”/”行中”/”行尾”
  3. 暂时未添加”收缩”/”展开”时的动画效果。

添加依赖

compile 'cn.carbs.android:ExpandableTextView:1.0.0'

使用方法:

有两种方法设置文字: 
(1)在java中更新文字

//普通视图中的更新
etv.setText(text);
//在ListView/RecyclerView中的应用
etv.updateForRecyclerView(text, etvWidth, state);//etvWidth为控件的真实宽度,state是控件所处的状态,“收缩”/“伸展”状态

(2)在xml中直接设置文字

<cn.carbs.android.expandabletextview.library.ExpandableTextView
                android:id="@+id/etv"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/long_poem" />

android ExpandableTextView-自定义可以动态展开/收缩显示长文本的TextView_自定义_02

感谢

ReadMoreTextView