Android實(shí)現(xiàn)可以展開的TextView
本文實(shí)例為大家分享了一個(gè)可以展開的TextView的具體代碼,供大家參考,具體內(nèi)容如下
原理是通過點(diǎn)擊的時(shí)候設(shè)置 setMaxLines(lineNum)來實(shí)現(xiàn):
public class ExpandableTextView extends TextView {
private static int MIN_LINE_NUM = 2;
private static int MAX_LINE_NUM = 20;
private int lineNum = MIN_LINE_NUM;
private boolean mIsExpanded = false;
Bitmap bitmapDown;
Bitmap bitmapUp;
int w, h;
/** 點(diǎn)擊事件listener */
private OnClickListener mOnClickListener;
public ExpandableTextView(Context context, AttributeSet attrs) {
super(context, attrs);
init(context, attrs);
}
private void init(Context context, AttributeSet attrs) {
setMaxLines(lineNum);
bitmapDown = BitmapFactory.decodeResource(getResources(), R.drawable.update_detail_down);
bitmapUp = BitmapFactory.decodeResource(getResources(), R.drawable.update_detail_up);
w = bitmapDown.getWidth() + (int) context.getResources().getDimension(R.dimen.expand_textview_right);
h = bitmapDown.getHeight() + (int) context.getResources().getDimension(R.dimen.expand_textview_bottom);
super.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (lineNum == MIN_LINE_NUM) {
lineNum = MAX_LINE_NUM;
setMaxLines(lineNum);
} else {
lineNum = MIN_LINE_NUM;
setMaxLines(lineNum);
}
if (mOnClickListener != null) {
mOnClickListener.onClick(v);
}
}
});
}
@Override
public void setOnClickListener(OnClickListener listener) {
if (!isClickable()) {
setClickable(true);
}
mOnClickListener = listener;
}
@Override
public void setMaxLines(int maxlines) {
super.setMaxLines(maxlines);
if (lineNum == MAX_LINE_NUM) {
mIsExpanded = true;
} else {
mIsExpanded = false;
}
}
public boolean isExpanded() {
return mIsExpanded;
}
@Override
protected void onDraw(Canvas canvas) {
if (getLineCount() <= MIN_LINE_NUM) {
super.onDraw(canvas);
return;
}
if (lineNum == MIN_LINE_NUM) {
canvas.drawBitmap(bitmapDown, getWidth() - w, getHeight() - h, null);
} else {
canvas.drawBitmap(bitmapUp, getWidth() - w, getHeight() - h, null);
}
super.onDraw(canvas);
}
public void setMaxLine(int line) {
lineNum = line;
setMaxLines(line);
}
}
這樣來寫Layout:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#FFFFFF" > <TextView android:id="@+id/detail_action" android:textColor="#000000" android:textSize="11sp" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_marginRight="8dip" android:drawablePadding="4dip" android:paddingBottom="10dip" android:paddingTop="10dip" android:singleLine="true" android:text="sdfkljsfiosjdfiosfjsiofjsdifsd" /> <com.example.view.ExpandableTextView android:id="@+id/textview" android:layout_width="100dp" android:layout_height="wrap_content" android:layout_below="@id/detail_action" android:lineSpacingExtra="4dip" android:paddingBottom="-40dip" android:paddingRight="48dip" android:text="adfsfsfewrwerwerwerqRWgdffdfdfERSAFSDFSDFSDd" android:layout_marginTop="-5dip" android:textColor="#000000" > </com.example.view.ExpandableTextView> <TextView android:id="@+id/detail_action1" android:textColor="#000000" android:textSize="11sp" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/textview" android:layout_marginRight="8dip" android:drawablePadding="4dip" android:paddingBottom="10dip" android:paddingTop="10dip" android:singleLine="true" android:text="sdfkljsfiosjdfiosfjsiofjsdifsd" /> </RelativeLayout>
效果圖:

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Android中TextView實(shí)現(xiàn)超過固定行數(shù)顯示“...展開全部”
- Android實(shí)現(xiàn)可點(diǎn)擊展開的TextView
- Android TextView實(shí)現(xiàn)多文本折疊、展開效果
- Android TextView多文本折疊展開效果
- Android UI實(shí)現(xiàn)多行文本折疊展開效果
- Android編程實(shí)現(xiàn)Listview點(diǎn)擊展開和隱藏的方法
- Android ExpandableListView展開列表控件使用實(shí)例
- Android自定義TextView仿微信朋友圈文字展開全文功能
相關(guān)文章
Android?縮放動(dòng)畫?ScaleAnimation的使用小結(jié)
ScaleAnimation即縮放動(dòng)畫,應(yīng)用場(chǎng)景特別多,比如常見的隱藏菜單點(diǎn)擊顯示,這篇文章主要介紹了Android?縮放動(dòng)畫?ScaleAnimation的使用小結(jié),需要的朋友可以參考下2024-03-03
Android創(chuàng)建與解析XML(二)——詳解Dom方式
本篇文章主要介紹了Android創(chuàng)建與解析XML(二)——詳解Dom方式 ,這里整理了詳細(xì)的代碼,有需要的小伙伴可以參考下。2016-11-11
Android使用popupWindow仿微信彈出框使用方法
這篇文章主要為大家詳細(xì)介紹了Android使用popupWindow仿微信彈出框使用方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-09-09
Android 開發(fā)中l(wèi)ayout下的子文件夾
這篇文章主要介紹了android 開發(fā)中l(wèi)ayout下的子文件夾,需要的朋友可以參考下2017-12-12
Kotlin中的對(duì)象表達(dá)式和對(duì)象聲明的具體使用
這篇文章主要介紹了Kotlin中的對(duì)象表達(dá)式和對(duì)象聲明的具體使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11
android橫豎屏切換時(shí)候Activity的生命周期
曾經(jīng)遇到過一個(gè)面試題,讓你寫出橫屏切換豎屏Activity的生命周期?,F(xiàn)在給大家分析一下他切換時(shí)具體的生命周期是怎么樣的2013-01-01
Android 后臺(tái)發(fā)送郵件示例 (收集應(yīng)用異常信息+Demo代碼)
今天介紹個(gè)更簡(jiǎn)單的方法,我們把異常信息收集后,通過后臺(tái)發(fā)送郵件方法,把相關(guān)異常信息發(fā)送到我們指定的郵箱里面2013-07-07

