TextView限定行數,點選按鈕顯示所有內容
阿新 • • 發佈:2019-02-04
在很多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展開顯示全部的功能了;