国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android實現可收縮和擴展的TextView

2019-12-12 03:16:09
字體:
來源:轉載
供稿:網友

在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; } }

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 东阿县| 女性| 兴隆县| 阳朔县| 封丘县| 吉木萨尔县| 临海市| 荔波县| 和政县| 迁安市| 吴桥县| 托克逊县| 静宁县| 论坛| 兴义市| 兴宁市| 神农架林区| 凯里市| 房山区| 郁南县| 仪征市| 沁源县| 宁化县| 大埔区| 西乌| 叶城县| 阳城县| 呼玛县| 东明县| 南昌市| 谷城县| 禄丰县| 云阳县| 灵川县| 呼玛县| 滨州市| 安阳市| 樟树市| 古田县| 灌云县| 大安市|