可伸縮的textview詳解(推薦)
在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;
}
}

以上這篇可伸縮的textview詳解(推薦)就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Android開發(fā)中ImageLoder進(jìn)行圖片加載和緩存
這篇文章主要介紹了Android開發(fā)中ImageLoder進(jìn)行圖片加載和緩存的相關(guān)資料,需要的朋友可以參考下2016-04-04
Android開發(fā)之利用Activity實(shí)現(xiàn)Dialog對(duì)話框
這篇文章主要給大家介紹了Android開發(fā)之如何利用Activity實(shí)現(xiàn)Dialog對(duì)話框效果,文中給出了詳細(xì)的示例代碼,相信對(duì)大家的理解及學(xué)習(xí)具有一定的參考借鑒價(jià)值,有需要的朋友們下面來一起看看吧。2016-12-12
Android使用surfaceView自定義抽獎(jiǎng)大轉(zhuǎn)盤
這篇文章主要為大家詳細(xì)介紹了Android使用surfaceView自定義抽獎(jiǎng)大轉(zhuǎn)盤,熟練掌握SurfaceVie實(shí)現(xiàn)抽獎(jiǎng)大轉(zhuǎn)盤,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-12-12
Android冷啟動(dòng)實(shí)現(xiàn)app秒開的實(shí)現(xiàn)代碼
本篇文章主要介紹了Android冷啟動(dòng)實(shí)現(xiàn)app秒開的實(shí)現(xiàn)代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-08-08
android使用ViewPager實(shí)現(xiàn)圖片自動(dòng)切換
這篇文章主要為大家詳細(xì)介紹了android使用ViewPager實(shí)現(xiàn)圖片自動(dòng)切換,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-02-02
Android自定義View實(shí)現(xiàn)簡易畫板功能
這篇文章主要介紹了Android自定義View實(shí)現(xiàn)簡易畫板功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-05-05
Android Framework Application Framework層簡單介紹
這篇文章主要介紹了 Android Framework Application Framework層簡單介紹的相關(guān)資料,需要的朋友可以參考下2016-11-11
Android Studio error: Unable to start the daemon process的解決方
這篇文章主要介紹了在 Android Studio 上新建項(xiàng)目,出現(xiàn) Unable to start the daemon process問題的幾種的解決方法,需要的朋友可以參考下2020-10-10
Android自定義View之組合控件實(shí)現(xiàn)類似電商app頂部欄
這篇文章主要為大家詳細(xì)介紹了Android自定義View之組合控件,實(shí)現(xiàn)類似電商app頂部欄的相關(guān)資料,具有參考價(jià)值,感興趣的小伙伴們可以參考一下2016-05-05

