TextView genişliğini karakter cinsinden ayarlayın


88

Gerçekten buna bir cevap arıyorum .

Bir sayı veya karaktere göre bir TextView genişliğini ayarlamak istiyorsanız. Yani her zaman 3 karakter genişliğinde olmasını istersem, bunu ayarlayabilirim ve textSize ayarına göre ayarlanır. Bu olmadan, yazı tipi boyutuna bağlı olarak doğru olabilecek veya olmayabilecek 50dip veya başka bir şeye genişlik ayarlamam gerekiyor.


Boyutunuzu belirleyerek bunu yapmanın muhtemelen bir yolu vardır sp.
CommonsWare

@CommonsWare, evet, eğer bana kaç SP'nin işe yarayabilecek bir karaktere eşit olduğunu söylerseniz (ama benim istediğimin bu olduğunu düşündüğüm için minEms kullanarak aşağıdaki cevabıma bakın). Yani metin boyutu = 30sp ise ve 3 karakter genişliğini istiyorsam genişliği 90sp olarak ayarlamalı mıyım? Sanırım deneyebilirim.
Fraggle

2
Evet, minEmsmuhtemelen daha iyi bir cevap.
CommonsWare

Yanıtlar:


178

Kendi sorumu cevaplıyorum ...

Ve kazanan: minEmsniteliği ( android:minEms) ayarlayın !!!

Yani " ems " en geniş karakterin boyutuna atıfta bulunuyor, tipik olarak bir "M", anladın mı? Bu nedenle, minEms'i bir EditText veya TextView üzerinde 3 diyen bir tamsayı değerine ayarlamak, en az 3 karakter genişliğinde olmasını sağlamalıdır. MaxEms'i de ayarlayabilirsiniz.

Yani Kyle'ın bu konu hakkındaki cevabı, yanlış olmasına rağmen, cevabı bulmama neden oldu, bu yüzden Kyle teşekkürler.


3
Tabii ki bunun gerçekten işe yarayıp yaramadığını görmek için hala test ediyorum, ancak şimdiye kadar öyle görünüyor.
Fraggle

8
Ayrıca , bu cevabın da işaret layout_widthettiği gibi wrap_content, minEms ve maxEms'in amaçlandığı gibi çalışması için olması gerektiğini unutmayın .
Jonik

0

Yazı tiplerinin çoğu, tüm karakter genişliklerini aynı olacak şekilde ayarlamaz. Courier belki de bunun en çok kullanılan istisnasıdır, ancak genel olarak bir i ve bir A arasındaki farka bakın. Bu, istediğiniz şeyi biraz problem haline getirir.


doğru, bu yüzden bu sorunun çözüldüğünü umuyordum. Öyleyse genişliği karakter cinsinden ayarlayın ve ardından görüntüleme sırasında bu alanın yazı tipi özelliklerini bulun ve buna göre ne kadar büyük olması gerektiğini belirleyin. Bu sorunun çözülüp çözülmediğini gerçekten kolay bir şekilde sormak. Değil gibi görünüyor.
Fraggle

0

Şunları kullanmayı deneyin: android:maxLength="3"

Bu, metninizi belirli sayıda karakterle sınırlayacaktır.


0

emspopüler inançların aksine (veya en azından buradaki ems ile ilgili çoğu konudan), tek bir 'M' genişliğine dayanmıyor.

Başlangıçta tipografide böyleydi, ancak Android dahil olmak üzere dijital ortamda, anlamı kullanılan yazı tipinin boyutuna veya başka bir deyişle yüksekliğine (aksanlar / aksanlar için herhangi bir dolgu hariç) kaydırıldı.

Bu, emsbir TextView için belirttiğinizde , bunu textSizetemel olarak kullanacağı ve emsbelirtilenle çarpacağı anlamına gelir .

Örnek olarak, 16sp TextView’i 4’e ayarlarsanız ems, genişliği 64sp geniş olacaktır. includeFontPaddingBir ConstraintLayout içinde (ondan yararlanmak için layout_constraintDimensionRatio) iki TextView ( false olarak ayarlı) kullanarak kolayca test edebilirsiniz .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.