Android: TextView secara otomatis memotong dan mengganti 3 karakter terakhir dari String

131

Jika a Stringlebih panjang dari TextViewlebar, maka secara otomatis membungkus ke baris berikutnya. Saya dapat menghindari ini dengan menggunakan android:singleLine(usang) atau dengan menetapkan android:inputType="text". Yang saya butuhkan sekarang adalah sesuatu yang menggantikan 3 karakter terakhir saya Stringdengan " ... ". Karena saya tidak menggunakan font monospace ini akan selalu berbeda tergantung pada huruf yang digunakan dalam bahasa saya String. Jadi saya bertanya-tanya apa cara terbaik untuk mendapatkan 3 karakter terakhir dari String TextViewdan menggantinya. Mungkin sudah ada sesuatu yang diterapkan dalam kerangka Android, karena ini pasti masalah umum.

znq
sumber

Jawaban:

290

Anda harus dapat menggunakan properti "ellipsize" dari tampilan teks:

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/text_mytext"
    android:ellipsize="end"
    android:maxLines="1"
/>

Anda mungkin juga perlu menerapkan nilai gravitasi ke tata letak juga; Saya terkadang melihat pemandangan "peregangan otomatis" tanpa mereka.

Nate
sumber
Sempurna. Terima kasih. Saya sudah mencobanya sebelumnya, tetapi tidak berhasil, karena saya menggunakan android: inputType = "text", bukan android: singleLine = "true" (yang seharusnya sudah usang). Tapi sekarang saya akan tetap dengan android: singleLine = "true". Terima kasih banyak.
znq
44
Masih tidak menambahkan "...". Bagi saya, pertanyaan ini belum terjawab sepenuhnya! Jawaban ini akan membuat "kata pendek yang sangat pendek" menjadi "singkat" dan bukan "kata pendek yang sangat pendek ..." Selain itu, kalian menyarankan menggunakan atribut yang sudah tidak digunakan lagi.
OneWorld
7
Berfungsi bagus, namun singleLine sudah usang sehingga Anda harus menggunakan maxLines = "1" sebagai gantinya. Catatan, ellipsize juga berfungsi dengan banyak garis!
Torre Lasley
4
singleLine sudah tidak digunakan lagi. Gunakan maxLines = "1". hanya komentar untuk jawaban lama
Ewoks
1
MaxLine = 1 akan memotong tampilan teks di tengah. SingleLine = True berfungsi seperti yang diharapkan.
Snake
33

Menemukan pekerjaan yang menarik untuk masalah ini.

maxLines=1
ellipsize=end
scrollHorizontally=true

Caranya adalah pernyataan terakhir tentang pengguliran horizontal .... Setidaknya itu berfungsi pada v2.2.

BonanzaDriver
sumber
Menarik ... senang diketahui. Terima kasih Marco atas bantuannya.
BonanzaDriver
4

Secara pemrograman, Anda dapat menggunakan:

TextView tx = new TextView(this);
tx.setTextSize(13);
tx.setGravity(Gravity.CENTER);
tx.setTop(90);
tx.setText("Long text here");
tx.setTextColor(Color.BLACK);
tx.setSingleLine(true);
tx.setEllipsize(TruncateAt.END);
xevser
sumber