Really looking for an answer to this.
Want to set the width of a TextView based on a number or characters. So if I want it to always be 3 characters wide, I could set that and it will adjust based on the textSize setting. Without this, I have to set a width to 50dip or something, which may or may not be right depending on the font size.
Answering my own question...
And the winner is: set the minEms
attribute (android:minEms
) !!!
So "ems" it turns out refers to the size of the widest character, typically an "M", get it? So setting minEms to an integer value say 3, on an EditText or TextView should ensure it's at least 3 characters wide. You can set the maxEms as well.
So Kyle's answer on this thread, although wrong, caused me to find the answer, so thanks Kyle.
ems
, contrary to popular beliefs (or at least from most thread about ems here), is not based from the width of a single 'M'.
It was originally like that in typography, but in digital medium, including Android, its meaning was shifted to the size of the typeface used, or in other word, its height (excluding any padding for accents/diacritics).
So that means when you specify the ems
for a TextView, it will used its textSize
as a base and multiply it by the ems
specified.
As a sample, if you set a 16sp TextView's ems
to 4, its width will be 64sp wide. You can easily test it by using two TextView (with includeFontPadding
set to false) side-by-side inside a ConstraintLayout (to leverage its layout_constraintDimensionRatio
).
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With