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

首頁(yè) > 系統(tǒng) > Android > 正文

Android實(shí)現(xiàn)可收縮和擴(kuò)展的TextView

2019-10-23 18:33:30
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

在Android原生的TextView的基礎(chǔ)上,可收縮/擴(kuò)展的TextView:PhilExpandableTextView。

實(shí)現(xiàn)原理:核心是控制TextView的max lines。在TextView的初始化階段但尚未繪制出View的時(shí)候,使用ViewTreeObserver,監(jiān)聽onPreDraw事件,獲取TextView正常顯示需要顯示的總行數(shù),但只給TextView設(shè)置最大運(yùn)行的行數(shù)(小于總行數(shù)),從而造成TextView的收縮摘要效果,當(dāng)用戶通過按鈕或其他方式擴(kuò)展時(shí)候,把TextView的最大行數(shù)設(shè)置為正常顯示完全的行數(shù)+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 {  // 最大行,默認(rèn)顯示3行 private final int MAX = 3; // 完全展開需要的行數(shù) private int lines;  private ExpandableTextView mExpandableTextView;  private boolean expandablestatus = false;  // 構(gòu)造方法用兩個(gè)參數(shù)的 public ExpandableTextView(Context context, AttributeSet attrs) {  super(context, attrs);  mExpandableTextView = this;  init();  }  private void init() {  // 在view繪制之前的時(shí)候執(zhí)行,在onDraw之前  ViewTreeObserver mViewTreeObserver = this.getViewTreeObserver();  mViewTreeObserver.addOnPreDrawListener(new OnPreDrawListener() {    @Override   public boolean onPreDraw() {    // 避免重復(fù)監(jiān)聽    mExpandableTextView.getViewTreeObserver().removeOnPreDrawListener(this);    // 獲得內(nèi)容行數(shù)    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; } }

Android,收縮,擴(kuò)展,TextView

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持VEVB武林網(wǎng)。


注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到Android開發(fā)頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 渝中区| 萨迦县| 怀化市| 望奎县| 台北市| 新巴尔虎右旗| 湛江市| 佛学| 佛教| 互助| 藁城市| 南涧| 濉溪县| 龙游县| 开化县| 丹寨县| 都兰县| 巴马| 石台县| 托里县| 望奎县| 平原县| 杭锦后旗| 平邑县| 车致| 资溪县| 南召县| 岑巩县| 东海县| 北流市| 安顺市| 会宁县| 广昌县| 中西区| 宁津县| 同江市| 大埔县| 墨竹工卡县| 万年县| 庆云县| 和林格尔县|