Đặt chiều rộng của TextView theo ký tự


88

Thực sự đang tìm kiếm một câu trả lời cho điều này .

Muốn thiết lập chiều rộng của TextView dựa trên một số hoặc các ký tự. Vì vậy, nếu tôi muốn nó luôn rộng 3 ký tự, tôi có thể đặt điều đó và nó sẽ điều chỉnh dựa trên cài đặt textSize. Nếu không có điều này, tôi phải đặt chiều rộng thành 50dip hoặc cái gì đó, có thể đúng hoặc không tùy thuộc vào kích thước phông chữ.


Có thể có một cách để làm điều này thông qua việc chỉ định thứ nguyên của bạn trong sp.
CommonsWare

@CommonsWare, vâng, nếu bạn có thể cho tôi biết có bao nhiêu SP bằng một ký tự có thể hoạt động (nhưng hãy xem câu trả lời của tôi bên dưới bằng cách sử dụng minEms vì tôi nghĩ đó là điều tôi muốn). Vì vậy, nếu kích thước văn bản = 30sp và tôi muốn rộng 3 ký tự, tôi có đặt chiều rộng là 90sp không? Tôi đoán tôi có thể thử nó.
Fraggle

2
Vâng, minEmscó lẽ là một câu trả lời tốt hơn.
CommonsWare

Câu trả lời:


177

Trả lời câu hỏi của riêng tôi ...

Và người chiến thắng là: đặt minEmsthuộc tính ( android:minEms) !!!

Vì vậy, " ems " hóa ra đề cập đến kích thước của ký tự rộng nhất, thường là "M", hiểu không? Vì vậy, đặt minEms thành một giá trị số nguyên, chẳng hạn như 3, trên EditText hoặc TextView phải đảm bảo nó có chiều rộng ít nhất 3 ký tự. Bạn cũng có thể đặt maxEms.

Vì vậy, câu trả lời của Kyle trên chủ đề này, mặc dù sai, nhưng tôi đã tìm ra câu trả lời, vì vậy cảm ơn Kyle.


3
tất nhiên tôi vẫn đang thử nghiệm để xem liệu điều này có thực sự hoạt động hay không, nhưng cho đến nay thì có vẻ như vậy.
Fraggle

8
Cũng lưu ý rằng layout_widthcần phải wrap_contentđể minEms và maxEms hoạt động như dự định, như câu trả lời này đã chỉ ra.
Jonik

0

Hầu hết các phông chữ không đặt tất cả các chiều rộng ký tự giống nhau. Chuyển phát nhanh có lẽ là ngoại lệ được sử dụng nhiều nhất cho điều này, nhưng nhìn chung, hãy nhìn vào sự khác biệt giữa chữ i và chữ A. Điều này làm cho những gì bạn yêu cầu thực hiện một chút vấn đề.


đúng, vì vậy tôi hy vọng rằng vấn đề này đã được giải quyết. Vì vậy, hãy đặt chiều rộng theo ký tự và sau đó tại thời điểm hiển thị, hãy tìm ra đặc điểm phông chữ cho trường đó và xác định độ lớn của nó dựa trên đó. Vì vậy, thực sự hỏi nếu vấn đề này đã được giải quyết, một cách dễ dàng. Nghe có vẻ như không.
Fraggle

0

Hãy thử sử dụng: android:maxLength="3"

Điều này sẽ giới hạn văn bản của bạn ở một số ký tự cụ thể.


0

ems, trái với niềm tin phổ biến (hoặc ít nhất là từ hầu hết các chủ đề về ems ở đây), không dựa trên chiều rộng của một chữ 'M'.

Ban đầu nó giống như vậy trong kiểu chữ, nhưng trong phương tiện kỹ thuật số, bao gồm cả Android, ý nghĩa của nó đã được chuyển sang kích thước của kiểu chữ được sử dụng, hay nói cách khác là chiều cao của nó (không bao gồm bất kỳ phần đệm nào cho dấu / dấu).

Vì vậy, điều đó có nghĩa là khi bạn chỉ định emscho TextView, nó sẽ sử dụng nó textSizelàm cơ sở và nhân nó với giá trị đã emschỉ định.

Ví dụ: nếu bạn đặt TextView 16sp emsthành 4, chiều rộng của nó sẽ rộng 64sp. Bạn có thể dễ dàng kiểm tra nó bằng cách sử dụng hai TextView ( includeFontPaddingđược đặt thành false) cạnh nhau bên trong ConstraintLayout (để tận dụng nó layout_constraintDimensionRatio).

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.