首页 > 系统 > Android > 正文

可伸缩的textview详解(推荐)

2019-12-12 03:14:34
字体:
来源:转载
供稿:网友

在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详解(推荐)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持武林网。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表