中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么在Android應用中實現一個可收縮與擴展的TextView

發布時間:2020-11-30 17:41:05 來源:億速云 閱讀:152 作者:Leah 欄目:移動開發

這期內容當中小編將會給大家帶來有關怎么在Android應用中實現一個可收縮與擴展的TextView,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

實現原理:核心是控制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;
 }
 
}

上述就是小編為大家分享的怎么在Android應用中實現一個可收縮與擴展的TextView了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

溧阳市| 忻城县| 贵州省| 原平市| 舒城县| 台北县| 吉水县| 兰州市| 萍乡市| 澎湖县| 浮山县| 宁陵县| 梓潼县| 班玛县| 高雄市| 舟曲县| 西藏| 屏东市| 平陆县| 望江县| 上栗县| 方城县| 临清市| 浦城县| 林甸县| 石楼县| 青海省| 蒙山县| 东海县| 清涧县| 上蔡县| 镇宁| 商丘市| 滦平县| 永川市| 新密市| 城步| 张家港市| 道真| 南开区| 鹿邑县|