1. 程式人生 > >TextView限定行數,點選按鈕顯示所有內容

TextView限定行數,點選按鈕顯示所有內容

在很多app上能看到文字展示收縮效果,點選展示全部,再點選收縮,顯示指定行數的效果,如圖:
預設狀態:
這裡寫圖片描述

保持顯示不動,展開全部:
這裡寫圖片描述

實現基本的TextView點選顯示所有內容;一開始實現效果很low,基本是區域性隱藏顯示,這樣很不好,後來看到了TextView的setEllipsize屬性,一個TextView實現展示收縮功能,保持現實的不變,無卡頓.下面分享下實現程式碼:

一 xml佈局檔案

<TextView
android:id="@+id/tv_details"       android:layout_width="match_parent"
android:
layout_height="wrap_content" android:textSize="20sp" android:textColor="#FF2043AC" android:maxLines="2" android:text="這是一個TextView展開效果演示demo,點選展開按鈕實現文字全部顯示,點選收縮按鈕實現文字省略顯示"/> <ImageView android:id="@+id/iv_details" android:layout_below="@+id/tv_details" android:layout_width="30dp" android:layout_height="30dp"
android:layout_centerHorizontal="true" android:src="@mipmap/details_open" />

android:maxLines=”2”這兒可以根據自己需要設定預設顯示的行數;

二 activity中的程式碼:

public class MainActivity extends AppCompatActivity {
    private Boolean flag = true;
    private TextView tv_details;
    private ImageView iv_details;
    @Override
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); iv_details = (ImageView) findViewById(R.id.iv_details); tv_details = (TextView) findViewById(R.id.tv_details); iv_details.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (flag) { flag = false; tv_details.setEllipsize(null); // 展開 tv_details.setSingleLine(flag); iv_details.setImageResource(R.mipmap.details_close); } else { flag = true; tv_details.setEllipsize(TextUtils.TruncateAt.END); // 收縮 tv_details.setMaxLines(2); iv_details.setImageResource(R.mipmap.details_open); } } }); } }

設定一個Boolean型別的標誌,當點選展開時呼叫:

    tv_details.setEllipsize(null); 
    tv_details.setSingleLine(flag);

則全部顯示,設定setEllipsize為null,設定setSingleLine為FALSE;
當收縮時:

    tv_details.setEllipsize(TextUtils.TruncateAt.END); 
     tv_details.setMaxLines(2);

則收縮顯示,設定setEllipsize為TextUtils.TruncateAt.END,設定setSingleLine為預設顯示的行數; 這樣就可以實現TextView展開顯示全部的功能了;