App中有一个类似于朋友圈文章的全文显示与收起的功能,研究了前辈的代码,分享给大家。

唯一的难点在于如何在布局完成之前获得文字的实际行数, 主要方法为view.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener()
在视图树将要绘制的时候提供一个监听,此时视图树已经测量完毕,并且有了布局框架,在这里我们可以在绘制之前得到控件的测量数据,并且修改影响最后的绘制结果。然后我们根据实际行数与需求行数的大小关系来判断文字的显示与折叠,说完了,直接上代码。

布局文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><TextViewandroid:id="@+id/tv_content"android:layout_width="wrap_content"android:layout_height="wrap_content" /><TextViewandroid:id="@+id/tv_all"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center_horizontal"android:layout_marginTop="20dp"android:background="@drawable/selector_background_textview"android:padding="25dp"android:text="全文"android:textColor="@android:color/holo_red_dark" />
</LinearLayout>

功能代码:

       //lineCount文字的行数//fold是否是折叠状态//defaultMaxLine默认最多展示的行数tvAll.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {if (lineCount > defaultMaxLine) {if (fold) {tvContent.setMaxLines(10086);tvAll.setText("收起");} else {tvContent.setMaxLines(defaultMaxLine);tvAll.setText("全文");}fold = !fold;}}});tvContent.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {@Overridepublic boolean onPreDraw() {//这个回调会调用多次,获取完行数记得注销监听tvContent.getViewTreeObserver().removeOnPreDrawListener(this);lineCount = tvContent.getLineCount();if (lineCount > defaultMaxLine) {tvContent.setMaxLines(defaultMaxLine);fold = true;tvAll.setVisibility(View.VISIBLE);tvAll.setText("全文");} else {tvAll.setVisibility(View.GONE);}return true;}});

源码:

/*** Interface definition for a callback to be invoked when the view tree is about to be drawn.*/public interface OnPreDrawListener {/*** Callback method to be invoked when the view tree is about to be drawn. At this point, all* views in the tree have been measured and given a frame. Clients can use this to adjust* their scroll bounds or even to request a new layout before drawing occurs.** @return Return true to proceed with the current drawing pass, or false to cancel.** @see android.view.View#onMeasure* @see android.view.View#onLayout* @see android.view.View#onDraw*/public boolean onPreDraw();}

android 实现微信朋友圈文字收起与全文显示功能相关推荐

  1. android 微信朋友圈 全功能,Android仿微信朋友圈文字展开全文功能 Android自定义TextView仿微信朋友圈文字展开全文功能...

    Android自定义TextView仿微信朋友圈文字信息,展开全文功能 代码及注释如下: 首先写一个xml文件 showmore.xml: android:orientation="vert ...

  2. android 微信朋友圈 全功能,Android自定义TextView仿微信朋友圈文字展开全文功能

    Android自定义TextView仿微信朋友圈文字信息,展开全文功能 代码及注释如下: 首先写一个xml文件 showmore.xml: android:orientation="vert ...

  3. Android仿微信朋友圈发图片和文字

    Android仿微信朋友圈发图片和文字的一个开源项目,其在github上的项目主页是:https://github.com/zhangphil/FangWeiXinPengYouQuanFaTuPia ...

  4. Android免费的导出微信朋友圈文字和图片的工具

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴!      ...

  5. 自定义控件 仿微信朋友圈文字展开全文功能

    自定义TextView仿微信朋友圈文字信息,展开全文功能 代码及注释如下: 首先写一个xml文件 showmore.xml: <?xml version="1.0" enco ...

  6. Android自定义弹窗模仿微信,Android 仿微信朋友圈点赞和评论弹出框功能

    本文简单模仿微信朋友圈的点赞和评论弹出框,布局等细节请忽略,着重实现弹出框.发评论,及弹出位置的控制. 1. 微信弹出框 微信朋友圈的点赞和评论功能,有2个组成部分: 点击左下角的"更多&q ...

  7. android 仿微信朋友圈 评论,2020年android 仿微信朋友圈 评论

    2020年android 仿微信朋友圈 评论 1.如果有人问我:那些艰难的岁月你是怎么熬过来的?我想我只有一句话回答:我有一种强大的精神力量支撑着我,这种力量名字叫"想死又不敢" ...

  8. 微信朋友圈“文字发”操作技巧,轻松实现不带图发布

    微信朋友圈"文字"操作技巧,轻松实现不带图发布 微信朋友圈作为一款非常受欢迎的社交软件,不仅可以让我们方便地分享照片.视频等内容,还可以通过文字来表达自己的想法和感受.但是,有时候 ...

  9. android导出微信朋友圈怎么发文字,微信朋友圈怎么发纯文字?看完这篇文章,你就知道该怎么操作了...

    经常使用微信聊天的朋友,一定会发现明明微信朋友圈只支持发视频或图片,然后配文字发送,为什么有些人的朋友圈可以发送纯文字呢?本期文章就教教大家如何使用微信"发纯文字"的朋友圈. 以安 ...

最新文章

  1. vue项目结构php写哪里,Vue-cli搭建项目后目录结构的分析(图文)
  2. 008_表内容的插入删除修改
  3. [转] vim自定义配置 和 在ubnetu中安装vim
  4. Linux网络服务参数配置说明及实战
  5. 驱动精灵万能网卡版单文件版 v9.61
  6. 从零开始前端学习[26]:html5的一些常用标签,header,footer,section,aside,figure,figcaption,nav,artical,
  7. excel学习-日期计算函数DATEDIF函数(计算相隔年数、月数、天数)
  8. Keil5最新版本下载(MDK 5.25, C51v959)
  9. 【毕业设计】基于stm32的示波器设计与实现 - 单片机 嵌入式
  10. addevent()实现跨浏览器绑定事件
  11. 你要的并不是ChatGPT,而是强大和经济的算力
  12. jQuery触发a标签的click事件
  13. 【Python爬虫系列教程 31-100】通过scrapy框架、爬取汽车之家宝马5系图片,学习Images管道
  14. android设置打开蓝牙时报错:java.lang.SecurityException: Need android.permission.BLUETOOTH_CONNECT permission
  15. java replace stringbuilder_2020年最新java面试题库(部分)
  16. #error和#line
  17. 【复杂链表的复制】C语言实现
  18. IDEA code template配置和参数详解
  19. ftp 服务部署及ftp 权限设置
  20. c语言图形学彩球上浮,计算机图形学课程设计--- 弹跳的彩球动画.doc

热门文章

  1. linux—rm命令详解(一天一个命令)
  2. ISCC-2019部分wp
  3. 中国微量营养素市场趋势报告、技术动态创新及市场预测
  4. 《速度与激情》男主演保罗沃克车祸身亡,再见速度再见难续的激情
  5. QUESTION: 由于文件 无法被用户‘_apt‘访问,已脱离沙盒并提权为根用户来进行下载。 - pkgAcquire::Run (13: 权限不够)
  6. [Clickhouse 入门到精通]-单机安装部署
  7. 吕爱国倾心讲座:混合方法研究的类型与程序设计
  8. 2018n年全国计算机考试,2018ncre全国计算机等级考试报名系统
  9. Softing参加ASAM中国区域大会暨C-ASAM技术论坛会议
  10. Docker搭建snipe-it全步骤