①监听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. swift_046(Swift map,filter, reduce方法)
  2. 计算机视觉开源库OpenCV之利用开操作(Opening Operation)修复受损照片方法
  3. 稳定排序与不稳定排序的定义
  4. JAVA 对象分配过程
  5. IDEA MAVEN Project 显示问题
  6. 盘点最经典的外包案例
  7. 子窗体中组合框联动_一张表实现组合框联动
  8. Java实训项目13:GUI学生信息管理系统 - 实现步骤 - 创建应用程序类
  9. eclipse-memory-analyzer使用说明
  10. Java做题错误知识点总结(頑張って)!
  11. spring-第四篇之让bean获取所在的spring容器
  12. 第三方定量定性质谱检测技术实验
  13. java开发随记之 Invalidate Caches / Restart
  14. mapped file has no Team ID and is not a platform binary (signed with custom identity or adhoc?
  15. 微软关闭了两种攻击途径:Office 宏、RDP 暴力破解
  16. 计算机导论第七章数据库基础,计算机导论教学大纲
  17. Professor Forcing: A New Algorithm for Training Recurrent Networks翻译
  18. 花老湿学习OpenCV:直方图、直方图的计算、均衡化、对比、反向投影
  19. Android和win10的融合,微软Windows10更新版亮相 更好融合iOS、Android系统
  20. Multi-Object Tracking with Multiple Cues and Switcher-Aware Classification 论文笔记

热门文章

  1. 呼叫中心工单系统,工单回访系统,呼叫中心
  2. 通达信c语言接口是什么?
  3. kali对常见端口的漏洞破解收录
  4. 十六进制(H)转换为10进制
  5. STM32F103+ADC采集实时电压+LCD1602A显示
  6. 光计算机的定义是什么意思,光计算机的意思_光计算机是什么意思_光计算机的近义词_反义词_读音-沪江在线词典...
  7. 创新实训【16】——热词分析图表展示
  8. 测试用例的编写与等价类的划分
  9. S32DS使用技巧--软件下载与激活
  10. nForce主板 巧妙去掉“安全删除硬盘”图标!