在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详解(推荐)全部内容,希望文章能够帮你解决可伸缩的textview详解(推荐)所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)