Android 显示全文折叠控件
生活随笔
收集整理的這篇文章主要介紹了
Android 显示全文折叠控件
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
轉載請注明來源!
一般列表里文字太多的一個折疊效果的空間,效果圖如下。
當文字超過設定的行數后就折疊,小于設定行數不顯示展開按鈕。下面上代碼。
先看布局文件:
很簡單,上面的TextView顯示主要的文本內容,下面的就是折疊的時候點擊的。
下面是自定義。
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() {@Overridepublic void dispatchMessage(Message msg) {if (mText.getLineCount() <= maxLineCount) {// 行數不足不做處理mState = COLLAPSIBLE_STATE_NONE;mText.setMaxLines(Integer.MAX_VALUE);mTextTip.setVisibility(View.GONE);}else {switch (mState) {case COLLAPSIBLE_STATE_SPREAD:// 全文狀態mText.setMaxLines(maxLineCount);mTextTip.setVisibility(View.VISIBLE);mTextTip.setText(COLLAPSIBLE_STATE_SPREAD_TEXT);break;case COLLAPSIBLE_STATE_SHRINKUP:// 收起狀態mText.setMaxLines(Integer.MAX_VALUE);mTextTip.setVisibility(View.VISIBLE);mTextTip.setText(COLLAPSIBLE_STATE_SHRINKUP_TEXT);break;default:// 除非發生不可知狀態,一般不會執行到這個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);}/*** 設置文本* * @param charSequence* @param bufferType*/public final void setText(CharSequence charSequence, BufferType bufferType) {isNeedLayout = true;mState = COLLAPSIBLE_STATE_SPREAD;mText.setText(charSequence, bufferType);}/*** 設置文本* * @param charSequence*/public final void setText(CharSequence charSequence) {isNeedLayout = true;mText.setText(charSequence);}@Overridepublic void onClick(View v) {isNeedLayout = true;if (mState == COLLAPSIBLE_STATE_SPREAD) {// 如果是全文狀態,就改成收起狀態mState = COLLAPSIBLE_STATE_SHRINKUP;requestLayout();}else if (mState == COLLAPSIBLE_STATE_SHRINKUP) {// 如果是收起狀態,就改成全文狀態mState = COLLAPSIBLE_STATE_SPREAD;requestLayout();}if (null != changeStateCallBack) {changeStateCallBack.changeFlag(v);}}@Overrideprotected 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);} }點擊展開后重新繪制根據狀態值觸發。
轉載請注明來源!
總結
以上是生活随笔為你收集整理的Android 显示全文折叠控件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java.util.Concurrent
- 下一篇: Android仿微信聊天语言点击喇叭动画