858期货网,鱼珠木材市场,汉字宫
在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详解(推荐)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持移动技术网。
如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复
Android studio开发小型对话机器人app(实例代码)
Android通过Java sdk的方式接入OpenCv的方法
Android 通过cmake的方式接入opencv的方法步骤
Android Studio finish()方法的使用与解决app点击“返回”(直接退出)
Android 进度条 ProgressBar的实现代码(隐藏、出现、加载进度)
网友评论