①监听TextView的绘制,当其未超过显示最大行数时,将其底部drawable动态设置为null。
②监听TextView的绘制超过显示最大行数时,记录最大行数的最后一个字的位置mLastEnd。
③监听TextView的点击事件,通过底部是否为null,为null,则没有折叠,不用进行其他操作。
不为null,则有折叠操作,v.setSelected(!v.isSelected());,折叠,则展开,显示全文,未折叠,则折叠,显示从0到mLastEnd-1的字符串

IntroduceTv布局

<TextViewandroid:id="@+id/detail_introduce_tv"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginTop="@dimen/_30px_in720p"android:drawableBottom="@drawable/detail_introduce_bottom_selector"android:drawablePadding="@dimen/_14px_in720p"android:paddingBottom="@dimen/_10px_in720p"android:textColor="@color/color_white"android:textSize="@dimen/_24px_in720p"app:layout_constraintTop_toBottomOf="@id/episode_parT_cl"/>

detail_introduce_bottom_selector.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"><item android:drawable="@mipmap/vod_more" android:state_selected="true"/><item android:drawable="@mipmap/vod_close"/>
</selector>
    int maxline = 3;  boolean isFold;int mLastEnd;mIntroduceTv.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {@Overridepublic boolean onPreDraw() {mIntroduceTv.getViewTreeObserver().removeOnPreDrawListener(this);if (mIntroduceTv.getLineCount() > maxline) {mLastEnd = mIntroduceTv.getLayout().getLineEnd(maxline-1) - getResources().getString(R.string.detail_introduce).length();mIntroduceTv.setText(getResources().getString(R.string.detail_introduce) + "\n" + mChannelBean.getDescription().substring(0, mLastEnd - 1));mIntroduceTv.setSelected(true);isFold = true;} else {mIntroduceTv.setCompoundDrawables(null, null, null, null);}return false;}});mIntroduceTv.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {if (mIntroduceTv.getCompoundDrawables()[3] == null) {return;}v.setSelected(!v.isSelected());if (isFold) {mIntroduceTv.setText(getResources().getString(R.string.detail_introduce) + "\n" + mChannelBean.getDescription());} else {mIntroduceTv.setText(getResources().getString(R.string.detail_introduce) + "\n" + mChannelBean.getDescription().substring(0, mLastEnd - 1));}isFold = !isFold;}});

TextView之折叠显示相关推荐

  1. Android之View提升:四 使用ExpandableListView 折叠显示

    Android之view提升:四 使用ExpandableListView 折叠显示 组项布局 子项布局 自定义Adapter 继承 BaseExpandableListAdapter package ...

  2. Emacs代码折叠/显示

    hs-show-all:显示所有的代码 hs-hide-all:折叠所有的代码 hs-show-block:显示当前代码区 hs-hide-block:折叠当前代码区 hs-toggle-hiding ...

  3. Android TextView、EditText显示输入法自带表情,记录一下

    参考文章写在首位 Android emoji显示 嘿嘿,其实代码都没有变. 在Android系统中使用系统自带的emoji表情 这篇文章里介绍,emoji表情实际上是一组Unicode编码与一组表情描 ...

  4. Android 单个TextView 点击“显示全部”功能实现方法

    网上很多TextView的"显示全部","显示更多"的方案实现都是两个TextView,一个在上面显示内容,一个在下面用来点击.但是我在实际工作中遇到的需求是& ...

  5. TextView文本折叠Three

    2019独角兽企业重金招聘Python工程师标准>>> 前两篇解决了一些问题,但是今天使用又出现了新的问题.添加在Listview中会出现布局错乱! So  在次解决! https: ...

  6. Android TextView里直接显示图片的三种方法

    方法一:重写TextView的onDraw方法,也挺直观就是不太好控制显示完图片后再显示字体所占空间的位置关系.一般如果字体是在图片上重叠的推荐这样写.时间关系,这个不付源码了. 方法二:利用Text ...

  7. sublime html 折叠,关于sublime text, notepad++,vscode 代码折叠显示的比较

    出于层次化编程的需要,同时也是为了净化屏幕的显示,有时候经常会使用到代码折叠的功能. 经过对3个喜欢的,也是最常用的代码编辑器sublime text, notepad++,vscode(ultrae ...

  8. Android中TextView限制一行显示及其它效果

    在TextView标签中加入以下内容即可实现一行显示,超出部分将隐藏 android:singleLine="true"

  9. textView不能完全显示时,滚动显示

    Android 软件设计界面时,TextView文字过多,显示不全,怎么办?我们可以为Textview添加滚动条. <TextView                 android:id=&q ...

最新文章

  1. 辞职后五险一金的处理方式
  2. 和ts一般怎么玩_KPL:一诺采访引热议,quot;裴擒虎是个野王都会quot;,暖阳怎么办?...
  3. C++ Primer 5th笔记(9)chapter9 顺序容器 vector 容器的自增长 容器适配器
  4. 全国计算机一级考试理论,全国计算机等级考试一级理论汇总(最新版).pptx
  5. Give root password for maintenance 问题解决.
  6. struts集成spring官方例子
  7. 关于APKsmail中加入代码报错All register args must fit in 4 bits
  8. Elasticsearch版本控制理解
  9. 空间权重矩阵构建(Stata代码)
  10. DEM数据获取方法与采样基础理论
  11. 永磁直驱风力发电机组并网仿真模型搭建
  12. 如何使用国内代理ip?
  13. 渗透测试之信息收集 -tryhackme-Content Discovery
  14. mysql-MyISAM存储引擎
  15. 为什么要对数据进行归一化处理
  16. 恐龙世界游戏-恐龙百科世界乐园游戏
  17. 新浪微博桌面客户端 v3.0.5.35466 官方PC版
  18. 蓝宝石rx580gpuz参数_蓝宝石RX580 2048SP 4G D5 白金版 OC游戏测试
  19. 华硕服务器组件,华硕最新推出一系列服务器及主板解决方案
  20. jredis 工具_java中的redis工具类

热门文章

  1. chrome 主页被劫持,每天首次打开chrome都会进入2345的界面
  2. 医学图像边缘检测matlab实验,基于Matlab的医学图像增强与边缘检测算法的实验研究...
  3. 软件测试方法划分等价类,软件测试基础-软件测试方法之等价类划分.ppt
  4. ghost还原服务器系统不行,系统ghost恢复后,Outlook连接不了exchange服务器
  5. 解决网络时断时续:Nvidia-NFORCE-nvnet.ko网卡驱动安装详解
  6. 游戏消息服务器长链接,游戏服务器匹配 长连接
  7. IDEA:更新项目:remote: [31mx-oauth-basic: Incorrect username or password (access token)
  8. 手机进销存软件的功能主要有哪些?
  9. Python Anaconda
  10. 关于Data Lake的概念、架构与应用场景介绍