TextView文本摺疊Two

上一篇有BUG,特意再來一個android

一、 建立佈局 collapsible_textview_layout.xmlide

佈局能夠本身修改樣式佈局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:padding="10dip">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="left"
        android:gravity="left"
        android:orientation="horizontal">
        <TextView
            android:id="@+id/desc_tv"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:gravity="center_vertical"
            android:lineSpacingExtra="3dp"
            android:text="asdasd"
            android:textColor="#4A4A4A"
            android:textSize="12sp" />
    </LinearLayout>
    <LinearLayout
        android:id="@+id/desc_op_ll"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="right"
        >
        <TextView
            android:id="@+id/desc_op_iv"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="展開" />
    </LinearLayout>
</LinearLayout>

二、佈局建立完成,接下來開始編寫自定義控件。首先在構造方法中獲取須要的佈局。post

public class CollapsibleTextView extends LinearLayout implements View.OnClickListener{

    //規定文本最大行數
    private int TEXT_MAX_LINE = 3;
    //是否可摺疊
    private boolean IS_COLLAPSIBLE;
    //是否已經摺疊
    private boolean COLLAPSIBLE;
    //第一次啓動進入onLayout方法標記
    private boolean flag;

    //下拉箭頭佈局
    private LinearLayout llDescOp;
    //下拉箭頭
    private TextView ivDescOp;
    //文本內容
    private TextView tvDesc;
     //監聽下拉箭頭的點擊事件了,經過判斷文本框的狀態作出相應的反應
    class InnerRunnable implements Runnable{

        @Override
        public void run() {
            if(IS_COLLAPSIBLE && COLLAPSIBLE){
                //可摺疊而且已經摺疊--文本展開
                tvDesc.setMaxLines(Integer.MAX_VALUE);
//                ivDescOp.setImageResource(R.mipmap.ic_launcher_round);
                ivDescOp.setText("收回");
                COLLAPSIBLE = false;
                flag = true;
            }else if(IS_COLLAPSIBLE && !COLLAPSIBLE){
                //可摺疊但未進行摺疊--文本摺疊
                tvDesc.setMaxLines(TEXT_MAX_LINE);
//                ivDescOp.setImageResource(R.mipmap.ic_launcher);
                ivDescOp.setText("展開");
                COLLAPSIBLE = true;
                flag = true;
            }
        }
    }

    public CollapsibleTextView(Context context, AttributeSet attrs) {
        super(context, attrs);
        //獲取view的佈局
        View view = inflate(context, R.layout.collapsible_textview_layout,this);
        tvDesc = (TextView) view.findViewById(R.id.desc_tv);
        llDescOp = (LinearLayout) view.findViewById(R.id.desc_op_ll);
        ivDescOp = (TextView) findViewById(R.id.desc_op_iv);
        llDescOp.setOnClickListener(this);
    }

    public CollapsibleTextView(Context context) {
        super(context);
    }

    //設置文本的內容方法,讓調用者使用。
    public void setText(String text){
        tvDesc.setText(text);
        requestLayout();
    }

    //獲取的佈局添加到控件上
    @Override
    protected void onLayout(boolean changed, int l, int t, int r, int b) {
        super.onLayout(changed, l, t, r, b);
        //初始化代碼
        //flag用來標記後續操做不走如下代碼
        if(!flag){
            //文本的行數大於規定值,摺疊並顯示下拉箭頭
            if(tvDesc.getLineCount() > TEXT_MAX_LINE){
                tvDesc.setMaxLines(TEXT_MAX_LINE);
                llDescOp.setVisibility(VISIBLE);
                IS_COLLAPSIBLE = true;
                COLLAPSIBLE = true;
            }else{
                llDescOp.setVisibility(GONE);
                IS_COLLAPSIBLE = false;
            }
        }
    }

    @Override
    public void onClick(View view) {
        post(new InnerRunnable());
    }
}

三、在咱們的佈局activity_main中引用此控件。注意格式,寫全控件的路徑。this

<com.guorentong.learn.textviewzhedie.CollapsibleTextView
    android:id="@+id/CollapsibleTextView"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
</com.guorentong.learn.textviewzhedie.CollapsibleTextView>

四、代碼調用 設置3d

collapsibleTextView = (CollapsibleTextView) findViewById(R.id.CollapsibleTextView);
//設置文字會出現效果
collapsibleTextView.setText("文本");
相關文章
相關標籤/搜索