กำหนดความกว้างของ TextView ในรูปแบบของอักขระ


88

กำลังมองหาคำตอบสำหรับเรื่องนี้จริงๆจริงๆ

ต้องการกำหนดความกว้างของ TextView ตามตัวเลขหรืออักขระ ดังนั้นถ้าฉันต้องการให้มีความกว้าง 3 อักขระฉันสามารถตั้งค่านั้นได้และจะปรับตามการตั้งค่า textSize หากไม่มีสิ่งนี้ฉันต้องตั้งค่าความกว้างเป็น 50dip หรือบางอย่างซึ่งอาจถูกหรือไม่ก็ได้ขึ้นอยู่กับขนาดตัวอักษร


อาจมีวิธีดำเนินการโดยระบุมิติข้อมูลของคุณในsp.
CommonsWare

@CommonsWare ใช่ถ้าคุณสามารถบอกฉันได้ว่ามี SP กี่ตัวที่เท่ากับหนึ่งอักขระที่อาจใช้งานได้ (แต่ดูคำตอบของฉันด้านล่างโดยใช้ minEms เพราะฉันคิดว่านั่นคือสิ่งที่ฉันต้องการ) ดังนั้นถ้า text size = 30sp และฉันต้องการความกว้าง 3 ตัวอักษรฉันจะตั้ง width เป็น 90sp หรือไม่? ฉันเดาว่าฉันสามารถลองได้
Fraggle

2
ใช่minEmsน่าจะเป็นคำตอบที่ดีกว่า
CommonsWare

คำตอบ:


178

กำลังตอบคำถามของตัวเอง ...

และผู้ชนะคือ: ตั้งค่าminEmsแอตทริบิวต์ ( android:minEms) !!!

ดังนั้น " ems " จึงหมายถึงขนาดของอักขระที่กว้างที่สุดโดยทั่วไปคือ "M" ใช่หรือไม่? ดังนั้นการตั้งค่า minEms เป็นค่าจำนวนเต็มพูดว่า 3 บน EditText หรือ TextView ควรแน่ใจว่ามีความกว้างอย่างน้อย 3 อักขระ คุณสามารถตั้งค่า maxEms ได้เช่นกัน

ดังนั้นคำตอบของ Kyle ในหัวข้อนี้แม้ว่าจะผิด แต่ก็ทำให้ฉันพบคำตอบดังนั้นขอบคุณ Kyle


3
แน่นอนว่าฉันยังคงทดสอบเพื่อดูว่ามันใช้งานได้จริงหรือไม่ แต่จนถึงตอนนี้ดูเหมือนว่า
Fraggle

8
โปรดทราบว่าlayout_widthจำเป็นต้องมีwrap_contentเพื่อให้ minEms และ maxEms ทำงานได้ตามที่ตั้งใจไว้ดังที่คำตอบนี้ชี้ให้เห็น
Jonik

0

ฟอนต์ส่วนใหญ่ไม่ได้ตั้งค่าความกว้างของอักขระให้เหมือนกันทั้งหมด Courier อาจเป็นข้อยกเว้นที่ถูกใช้มากที่สุด แต่โดยทั่วไปดูความแตกต่างระหว่าง i และ A สิ่งนี้ทำให้สิ่งที่คุณขอทำมีปัญหาเล็กน้อย


ใช่แล้วฉันหวังว่าปัญหานี้จะได้รับการแก้ไข ดังนั้นกำหนดความกว้างในรูปแบบของอักขระจากนั้นในเวลาแสดงผลให้ค้นหาลักษณะแบบอักษรสำหรับฟิลด์นั้นและกำหนดว่าควรมีขนาดใหญ่เพียงใดตามนั้น ถามจริงๆว่าปัญหานี้ได้รับการแก้ไขหรือไม่ด้วยวิธีง่ายๆที่ดี ฟังดูเหมือนไม่ใช่
Fraggle

0

ลองใช้: android:maxLength="3"

สิ่งนี้จะ จำกัด ข้อความของคุณให้มีอักขระจำนวนหนึ่ง


0

emsตรงกันข้ามกับความเชื่อที่เป็นที่นิยม (หรืออย่างน้อยก็จากหัวข้อส่วนใหญ่เกี่ยวกับ ems ที่นี่) ไม่ได้ขึ้นอยู่กับความกว้างของ 'M' ตัวเดียว

เดิมเป็นแบบนั้นในการพิมพ์ แต่ในสื่อดิจิทัลรวมถึง Android ความหมายของมันถูกเปลี่ยนไปตามขนาดของแบบอักษรที่ใช้หรืออีกนัยหนึ่งคือความสูง (ไม่รวมช่องว่างในการเน้นเสียง / การกำกับเสียง)

นั่นหมายความว่าเมื่อคุณระบุemsสำหรับ TextView มันจะใช้มันtextSizeเป็นฐานและคูณด้วยemsที่ระบุ

ตัวอย่างเช่นหากคุณตั้งค่า 16sp TextView เป็นems4 ความกว้างของมันจะกว้าง 64sp คุณสามารถทดสอบได้อย่างง่ายดายโดยใช้ TextView สองตัว (พร้อมincludeFontPaddingตั้งค่าเป็นเท็จ) เคียงข้างกันภายใน ConstraintLayout (เพื่อใช้ประโยชน์จากมันlayout_constraintDimensionRatio)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.