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>
效果圖:
以上就是本文的全部內(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使用JobScheduler定期推送本地通知實(shí)例代碼
本篇文章主要介紹了Android使用JobScheduler定期推送本地通知實(shí)例代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-06-06Android實(shí)現(xiàn)判斷手機(jī)未接來電及處理方法
這篇文章主要介紹了Android實(shí)現(xiàn)判斷手機(jī)未接來電及處理方法,需要的朋友可以參考下2014-07-07android內(nèi)存優(yōu)化之圖片優(yōu)化
對(duì)圖片本身進(jìn)行操作。盡量不要使用setImageBitmap、setImageResource、BitmapFactory.decodeResource來設(shè)置一張大圖,因?yàn)檫@些方法在完成decode后,最終都是通過java層的createBitmap來完成的,需要消耗更多內(nèi)存2012-12-12Android實(shí)現(xiàn)新手引導(dǎo)半透明蒙層效果
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)新手引導(dǎo)半透明蒙層效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-03-03Android實(shí)現(xiàn)自定義滑動(dòng)刻度尺方法示例
這篇文章主要給大家介紹了關(guān)于Android實(shí)現(xiàn)自定義滑動(dòng)刻度尺的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)各位Android開發(fā)者們具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04詳解Android Activity之間切換傳遞數(shù)據(jù)的方法
這篇文章主要介紹了詳解Android Activity之間切換傳遞數(shù)據(jù)的方法 的相關(guān)資料,需要的朋友可以參考下2016-04-04kotlin實(shí)現(xiàn)五子棋單機(jī)游戲
這篇文章主要為大家詳細(xì)介紹了kotlin實(shí)現(xiàn)五子棋單機(jī)游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-04-04