Setel lebar TextView dalam bentuk karakter

88

Benar-benar mencari jawaban untuk ini .

Ingin mengatur lebar TextView berdasarkan angka atau karakter. Jadi jika saya ingin selalu lebar 3 karakter, saya bisa mengaturnya dan itu akan menyesuaikan berdasarkan pengaturan textSize. Tanpa ini, saya harus mengatur lebar ke 50dip atau sesuatu, yang mungkin benar atau tidak tergantung pada ukuran font.

Fraggle
sumber
Mungkin ada cara untuk melakukan ini dengan menentukan dimensi Anda di sp.
CommonsWare
@CommonsWare, ya, jika Anda dapat memberi tahu saya berapa banyak SP yang sama dengan satu karakter yang mungkin berfungsi (tetapi lihat jawaban saya di bawah ini menggunakan minEms karena saya pikir itulah yang saya inginkan). Jadi jika ukuran teks = 30sp dan saya ingin lebar 3 karakter, apakah saya menyetel lebar ke 90sp? Saya kira saya bisa mencobanya.
Fraggle
2
Ya, minEmsmungkin jawaban yang lebih baik.
CommonsWare

Jawaban:

178

Menjawab pertanyaan saya sendiri ...

Dan pemenangnya adalah: set the minEmsattribute ( android:minEms) !!!

Jadi " ems " ternyata mengacu pada ukuran karakter terluas, biasanya "M", mengerti? Jadi menyetel minEms ke nilai integer katakanlah 3, pada EditText atau TextView harus memastikan lebarnya minimal 3 karakter. Anda juga dapat mengatur maxEms.

Jadi jawaban Kyle di utas ini, meskipun salah, menyebabkan saya menemukan jawabannya, jadi terima kasih Kyle.

Fraggle
sumber
3
tentu saja saya masih menguji untuk melihat apakah ini benar-benar berfungsi, tetapi sejauh ini sepertinya berhasil.
Fraggle
8
Juga mencatat bahwa layout_widthkebutuhan untuk menjadi wrap_contentuntuk minEms dan maxEms bekerja sebagaimana dimaksud, karena jawaban ini poin.
Jonik
0

Kebanyakan font tidak menyetel semua lebar karakter menjadi identik. Kurir mungkin merupakan pengecualian yang paling sering digunakan untuk ini, tetapi secara umum lihat perbedaan antara i dan A, misalnya. Hal ini membuat apa yang Anda minta untuk dilakukan menjadi sedikit masalah.

mah
sumber
benar, jadi saya berharap masalah ini telah diselesaikan. Jadi atur lebar dalam bentuk karakter dan kemudian pada waktu tampilan cari tahu karakteristik font untuk bidang itu dan tentukan seberapa besar itu harus didasarkan pada itu. Jadi benar-benar menanyakan apakah masalah ini telah diselesaikan, dengan cara yang bagus dan mudah. Sepertinya tidak.
Fraggle
0

Coba gunakan: android:maxLength="3"

Ini akan membatasi teks Anda ke sejumlah karakter tertentu.

KyleM
sumber
0

ems, bertentangan dengan kepercayaan populer (atau setidaknya dari sebagian besar utas tentang ems di sini), tidak didasarkan dari lebar satu 'M'.

Semula seperti itu pada tipografi, namun pada media digital termasuk android maknanya bergeser ke ukuran jenis huruf yang digunakan, atau dengan kata lain tingginya (tidak termasuk padding untuk aksen / diakritik).

Jadi itu berarti ketika Anda menentukan emsuntuk TextView, itu akan digunakan textSizesebagai basis dan mengalikannya dengan yang emsditentukan.

Sebagai contoh, jika Anda menyetel TextView 16sp emske 4, lebarnya akan menjadi 64sp. Anda dapat dengan mudah mengujinya dengan menggunakan dua TextView (dengan includeFontPaddingset ke false) secara berdampingan di dalam ConstraintLayout (untuk memanfaatkannya layout_constraintDimensionRatio).

Andrei Stakov
sumber