在Android原生的TextView的基礎(chǔ)上,可收縮/擴展的TextView:PhilExpandableTextView。
創(chuàng)新互聯(lián)建站長期為上1000+客戶提供的網(wǎng)站建設(shè)服務(wù),團隊從業(yè)經(jīng)驗10年,關(guān)注不同地域、不同群體,并針對不同對象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺,與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為良慶企業(yè)提供專業(yè)的網(wǎng)站設(shè)計、成都網(wǎng)站制作,良慶網(wǎng)站改版等技術(shù)服務(wù)。擁有十多年豐富建站經(jīng)驗和眾多成功案例,為您定制開發(fā)。
實現(xiàn)原理:核心是控制TextView的max lines。在TextView的初始化階段但尚未繪制出View的時候,使用ViewTreeObserver,監(jiān)聽onPreDraw事件,獲取TextView正常顯示需要顯示的總行數(shù),但只給TextView設(shè)置最大運行的行數(shù)(小于總行數(shù)),從而造成TextView的收縮摘要效果,當用戶通過按鈕或其他方式擴展時候,把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 {
// 最大行,默認顯示3行
private final int MAX = 3;
// 完全展開需要的行數(shù)
private int lines;
private ExpandableTextView mExpandableTextView;
private boolean expandablestatus = false;
// 構(gòu)造方法用兩個參數(shù)的
public ExpandableTextView(Context context, AttributeSet attrs) {
super(context, attrs);
mExpandableTextView = this;
init();
}
private void init() {
// 在view繪制之前的時候執(zhí)行,在onDraw之前
ViewTreeObserver mViewTreeObserver = this.getViewTreeObserver();
mViewTreeObserver.addOnPreDrawListener(new OnPreDrawListener() {
@Override
public boolean onPreDraw() {
// 避免重復監(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)容了,希望能給大家一個參考,也希望大家多多支持創(chuàng)新互聯(lián)。
分享題目:可伸縮的textview詳解(推薦)
鏈接地址:http://chinadenli.net/article44/jhpdhe.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供營銷型網(wǎng)站建設(shè)、關(guān)鍵詞優(yōu)化、搜索引擎優(yōu)化、網(wǎng)頁設(shè)計公司、網(wǎng)站策劃、建站公司
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)