Android顯示全文折疊控件使用方法詳解
一般列表里文字太多的一個(gè)折疊效果的空間,效果圖如下。

當(dāng)文字超過(guò)設(shè)定的行數(shù)后就折疊,小于設(shè)定行數(shù)不顯示展開(kāi)按鈕。下面上代碼。
先看布局文件:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@color/color_white" > <TextView android:id="@+id/desc_tv" style="@style/font2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center_vertical" /> <TextView android:id="@+id/desc_op_tv" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/desc_tv" android:gravity="center_vertical" android:singleLine="true" android:text="@string/quan_wen" android:textColor="#5f897b" android:textSize="16sp" android:visibility="gone" /> </RelativeLayout>
很簡(jiǎn)單,上面的TextView顯示主要的文本內(nèi)容,下面的就是折疊的時(shí)候點(diǎn)擊的。
下面是自定義。
package xxx;
import android.annotation.SuppressLint;
import android.content.Context;
import android.os.Handler;
import android.os.Message;
import android.util.AttributeSet;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.TextView.BufferType;
import xxx.R;
/**
* 查看全文控件
*/
public class CollapsibleTextView extends LinearLayout implements View.OnClickListener {
private static final int COLLAPSIBLE_STATE_NONE = 0;// 不顯示
private static final int COLLAPSIBLE_STATE_SHRINKUP = 1;// 顯示收起
private static final int COLLAPSIBLE_STATE_SPREAD = 2;// 顯示全文
private int mState = COLLAPSIBLE_STATE_SPREAD;
private static final String COLLAPSIBLE_STATE_SHRINKUP_TEXT = "收起";
private static final String COLLAPSIBLE_STATE_SPREAD_TEXT = "全文";
private TextView mText;
/**
* @return Returns the mText.
*/
public TextView getmText() {
return mText;
}
public int getmState() {
return mState;
}
public void setmState(int mState) {
this.mState = mState;
}
private TextView mTextTip;
private changeState changeStateCallBack;
private boolean isNeedLayout;
private int maxLineCount = 8;
private final Handler handler = new Handler() {
@Override
public void dispatchMessage(Message msg) {
if (mText.getLineCount() <= maxLineCount) {
// 行數(shù)不足不做處理
mState = COLLAPSIBLE_STATE_NONE;
mText.setMaxLines(Integer.MAX_VALUE);
mTextTip.setVisibility(View.GONE);
}
else {
switch (mState) {
case COLLAPSIBLE_STATE_SPREAD:
// 全文狀態(tài)
mText.setMaxLines(maxLineCount);
mTextTip.setVisibility(View.VISIBLE);
mTextTip.setText(COLLAPSIBLE_STATE_SPREAD_TEXT);
break;
case COLLAPSIBLE_STATE_SHRINKUP:
// 收起狀態(tài)
mText.setMaxLines(Integer.MAX_VALUE);
mTextTip.setVisibility(View.VISIBLE);
mTextTip.setText(COLLAPSIBLE_STATE_SHRINKUP_TEXT);
break;
default:
// 除非發(fā)生不可知狀態(tài),一般不會(huì)執(zhí)行到這個(gè)
mState = COLLAPSIBLE_STATE_NONE;
mText.setMaxLines(Integer.MAX_VALUE);
mTextTip.setVisibility(View.GONE);
break;
}
}
}
};
public CollapsibleTextView(Context context) {
this(context, null);
initView();
}
public CollapsibleTextView(Context context, AttributeSet attrs) {
super(context, attrs);
initView();
}
@SuppressLint("NewApi")
public CollapsibleTextView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
initView();
}
private void initView() {
View view = inflate(getContext(), R.layout.collapsible_textview, this);
view.setPadding(0, -1, 0, 0);
mText = (TextView) view.findViewById(R.id.desc_tv);
mTextTip = (TextView) view.findViewById(R.id.desc_op_tv);
mTextTip.setOnClickListener(this);
}
/**
* 設(shè)置文本
*
* @param charSequence
* @param bufferType
*/
public final void setText(CharSequence charSequence, BufferType bufferType) {
isNeedLayout = true;
mState = COLLAPSIBLE_STATE_SPREAD;
mText.setText(charSequence, bufferType);
}
/**
* 設(shè)置文本
*
* @param charSequence
*/
public final void setText(CharSequence charSequence) {
isNeedLayout = true;
mText.setText(charSequence);
}
@Override
public void onClick(View v) {
isNeedLayout = true;
if (mState == COLLAPSIBLE_STATE_SPREAD) {
// 如果是全文狀態(tài),就改成收起狀態(tài)
mState = COLLAPSIBLE_STATE_SHRINKUP;
requestLayout();
}
else if (mState == COLLAPSIBLE_STATE_SHRINKUP) {
// 如果是收起狀態(tài),就改成全文狀態(tài)
mState = COLLAPSIBLE_STATE_SPREAD;
requestLayout();
}
if (null != changeStateCallBack) {
changeStateCallBack.changeFlag(v);
}
}
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
super.onLayout(changed, l, t, r, b);
if (isNeedLayout) {
isNeedLayout = false;
handler.sendMessage(Message.obtain());
}
}
public int getMaxLineCount() {
return maxLineCount;
}
public void setMaxLineCount(int maxLineCount) {
this.maxLineCount = maxLineCount;
}
public changeState getChangeStateCallBack() {
return changeStateCallBack;
}
public void setChangeStateCallBack(changeState changeStateCallBack) {
this.changeStateCallBack = changeStateCallBack;
}
public interface changeState {
public void changeFlag(View v);
}
}
點(diǎn)擊展開(kāi)后重新繪制根據(jù)狀態(tài)值觸發(fā)。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Android UI實(shí)現(xiàn)多行文本折疊展開(kāi)效果
- Android TextView多文本折疊展開(kāi)效果
- Android TextView實(shí)現(xiàn)多文本折疊、展開(kāi)效果
- Android中RecyclerView實(shí)現(xiàn)多級(jí)折疊列表效果(二)
- Android中RecyclerView實(shí)現(xiàn)多級(jí)折疊列表效果(TreeRecyclerView)
- Android折疊式Toolbar使用完全解析(CollapsingToolbarLayout)
- android給RecyclerView加上折疊的效果示例
- Android中FoldingLayout折疊布局的用法及實(shí)戰(zhàn)全攻略
- Android TextView仿微信可折疊效果
- Android開(kāi)發(fā)實(shí)現(xiàn)的文本折疊點(diǎn)擊展開(kāi)功能示例
相關(guān)文章
Android跨應(yīng)用啟動(dòng)實(shí)例詳解
這篇文章主要介紹了 Android跨應(yīng)用啟動(dòng)實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下2017-04-04
Android中截取當(dāng)前屏幕圖片的實(shí)例代碼
該篇文章是說(shuō)明在Android手機(jī)或平板電腦中如何實(shí)現(xiàn)截取當(dāng)前屏幕的功能,并把截取的屏幕保存到SDCard中的某個(gè)目錄文件夾下面。實(shí)現(xiàn)的代碼如下:2013-08-08
Android實(shí)戰(zhàn)教程第六篇之一鍵鎖屏應(yīng)用問(wèn)題解決
這篇文章主要為大家詳細(xì)介紹了Android一鍵鎖屏應(yīng)用開(kāi)發(fā)過(guò)程中出現(xiàn)問(wèn)題的解決方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-11-11
Android Jetpack組件中LiveData的優(yōu)劣
LiveData是Jetpack組件的一部分,更多的時(shí)候是搭配ViewModel來(lái)使用,相對(duì)于Observable,LiveData的最大優(yōu)勢(shì)是其具有生命感知的,換句話說(shuō),LiveData可以保證只有在組件(?Activity、Fragment、Service)處于活動(dòng)生命周期狀態(tài)的時(shí)候才會(huì)更新數(shù)據(jù)2023-04-04
Android實(shí)現(xiàn)ImageView陰影和圖層效果
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)ImageView陰影和圖層效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-02-02
Android-Service實(shí)現(xiàn)手機(jī)壁紙自動(dòng)更換
這篇文章主要為大家詳細(xì)介紹了Android-Service實(shí)現(xiàn)手機(jī)壁紙自動(dòng)更換,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-11-11
AndroidStudio3 支持 Java8 了請(qǐng)問(wèn)你敢用嗎
Google 發(fā)布了 AS 3.0,以及一系列的 Support 包,有意思的新東西挺多,AS3里面有一個(gè)亮眼的特性就是支持J8。接下來(lái)通過(guò)本文給大家分享AndroidStudio3 支持 Java8 的相關(guān)內(nèi)容,感興趣的朋友一起看看吧2017-11-11

