可伸缩的textview详解(推荐)
发布时间 - 2026-01-11 00:26:21 点击率:次在Android原生的TextView的基础上,可收缩/扩展的TextView:PhilExpandableTextView。

实现原理:核心是控制TextView的max lines。在TextView的初始化阶段但尚未绘制出View的时候,使用ViewTreeObserver,监听onPreDraw事件,获取TextView正常显示需要显示的总行数,但只给TextView设置最大运行的行数(小于总行数),从而造成TextView的收缩摘要效果,当用户通过按钮或其他方式扩展时候,把TextView的最大行数设置为正常显示完全的行数+1(+1是保持余量,避免不足)。
public class MainActivity extends Activity {
private String str = "";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
for (int i = 0; i < 200; i++) {
str = str + i + " ";
}
final ExpandableTextView etv = (ExpandableTextView) findViewById(R.id.etv);
etv.setText(str);
Button btn = (Button) findViewById(R.id.btn);
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
boolean b = etv.getExpandablestatus();
b = !b;
etv.setExpandable(b);
}
});
}
}
PhilExpandableTextView.java:
package com.ganchuanpu.ExpandableTextView;
import android.content.Context;
import android.util.AttributeSet;
import android.view.ViewTreeObserver;
import android.view.ViewTreeObserver.OnPreDrawListener;
import android.widget.TextView;
import android.widget.Toast;
public class ExpandableTextView extends TextView {
// 最大行,默认显示3行
private final int MAX = 3;
// 完全展开需要的行数
private int lines;
private ExpandableTextView mExpandableTextView;
private boolean expandablestatus = false;
// 构造方法用两个参数的
public ExpandableTextView(Context context, AttributeSet attrs) {
super(context, attrs);
mExpandableTextView = this;
init();
}
private void init() {
// 在view绘制之前的时候执行,在onDraw之前
ViewTreeObserver mViewTreeObserver = this.getViewTreeObserver();
mViewTreeObserver.addOnPreDrawListener(new OnPreDrawListener() {
@Override
public boolean onPreDraw() {
// 避免重复监听
mExpandableTextView.getViewTreeObserver().removeOnPreDrawListener(this);
// 获得内容行数
lines = getLineCount();
return true;
}
});
setExpandable(false);
}
// 是否展开或者收缩,
// true,展开;
// false,不展开
public void setExpandable(boolean isExpand) {
if (isExpand) {
setMaxLines(lines + 1);
} else
setMaxLines(MAX);
expandablestatus = isExpand;
}
public boolean getExpandablestatus() {
return expandablestatus;
}
}
以上这篇可伸缩的textview详解(推荐)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
# textview伸缩
# android使用Textview实现伸缩效果
# 行数
# 给大家
# 正常显示
# 基础上
# 希望能
# 这篇
# 设置为
# 小编
# 大家多多
# 大行
# 只给
# void
# protected
# Bundle
# onCreate
# private
# Activity
# String
# Override
# str
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
如何在HTML表单中获取用户输入并用JavaScript动态控制复利计算循环
如何为不同团队 ID 动态生成多个“认领值班”按钮
使用C语言编写圣诞表白程序
悟空识字如何进行跟读录音_悟空识字开启麦克风权限与录音
Laravel API资源(Resource)怎么用_格式化Laravel API响应的最佳实践
Python文本处理实践_日志清洗解析【指导】
Laravel怎么进行数据库回滚_Laravel Migration数据库版本控制与回滚操作
php打包exe后无法访问网络共享_共享权限设置方法【教程】
网站建设要注意的标准 促进网站用户好感度!
jQuery validate插件功能与用法详解
如何快速搭建自助建站会员专属系统?
如何在阿里云高效完成企业建站全流程?
Laravel怎么处理异常_Laravel自定义异常处理与错误页面教程
大学网站设计制作软件有哪些,如何将网站制作成自己app?
Laravel中Service Container是做什么的_Laravel服务容器与依赖注入核心概念解析
html5怎么画眼睛_HT5用Canvas或SVG画眼球瞳孔加JS控制动态【绘制】
香港服务器网站测试全流程:性能评估、SEO加载与移动适配优化
香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南
jQuery 常见小例汇总
Linux安全能力提升路径_长期防护思维说明【指导】
Laravel如何使用Telescope进行调试?(安装和使用教程)
html5的keygen标签为什么废弃_替代方案说明【解答】
移动端手机网站制作软件,掌上时代,移动端网站的谷歌SEO该如何做?
如何快速搭建高效可靠的建站解决方案?
如何快速搭建高效WAP手机网站?
PHP 实现电台节目表的智能时间匹配与今日/明日轮播逻辑
高配服务器限时抢购:企业级配置与回收服务一站式优惠方案
香港服务器建站指南:免备案优势与SEO优化技巧全解析
简单实现jsp分页
香港服务器建站指南:外贸独立站搭建与跨境电商配置流程
如何快速上传建站程序避免常见错误?
使用Dockerfile构建java web环境
成都网站制作公司哪家好,四川省职工服务网是做什么用?
悟空识字怎么关闭自动续费_悟空识字取消会员自动扣费步骤
如何在阿里云虚拟服务器快速搭建网站?
Laravel的契約(Contracts)是什么_深入理解Laravel Contracts与依赖倒置
制作ppt免费网站有哪些,有哪些比较好的ppt模板下载网站?
Laravel如何与Vue.js集成_Laravel + Vue前后端分离项目搭建指南
Swift中循环语句中的转移语句 break 和 continue
最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?
VIVO手机上del键无效OnKeyListener不响应的原因及解决方法
如何快速搭建个人网站并优化SEO?
HTML5段落标签p和br怎么选_文本排版常用标签对比【解答】
Laravel如何记录自定义日志?(Log频道配置)
LinuxShell函数封装方法_脚本复用设计思路【教程】
小视频制作网站有哪些,有什么看国内小视频的网站,求推荐?
如何快速查询域名建站关键信息?
北京网站制作费用多少,建立一个公司网站的费用.有哪些部分,分别要多少钱?
重庆市网站制作公司,重庆招聘网站哪个好?
魔方云NAT建站如何实现端口转发?

