我有一个简单的EditText和layout_width="wrap_content"。属性中没有填充或边距。下面是一个完整的例子:
<EditText
android:id="@+id/maskPrefix"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ems="3"
android:inputType="text|textCapCharacters|textNoSuggestions"
android:maxLength="5"
android:maxLines="1"
android:nextFocusDown="@+id/maskNum"
android:text="GA"
android:textSize="18sp"
tools:ignore="LabelFor" />一切都很好但是..。但是:
如果我删除android:ems并通过android:maxLength设置最大宽度,那么一切都是适当的宽度。但我需要这两种特质。
为什么我的EditText宽度错了?这个神秘的乘法器是怎么回事?我使用Theme.AppCompat.Light.NoActionBar,最新的android (2.2.2),并使用
compile "com.android.support:support-v4:25.0.1"
compile 'com.android.support:appcompat-v7:25.0.1'在Nexus 5中用Android 6进行测试。
有什么选项或属性会使android:ems如此糟糕?
UPD.链接到this question不会以任何方式解决我的问题。另外,同时设置android:textSize和android:ems是绝对正确的。我希望我的文本中的字母是x sp大,我希望我的EditText是y chars宽。
发布于 2016-12-01 14:54:31
好吧,我找到凶手了。我认为ems大小x对于所有字符都是相同的。但我完全忘记了,我们有单空格和比例字体。当我们将ems设置为x时,它将是x*y,其中y是最宽的字母(通常是M)的宽度。但其他字母的宽度会更小。在这张图片上可以清楚地看到:

"M“字母比"1”宽得多!
解决方案:我们可以简单地切换到单空间字体,比如serif-monospace

https://stackoverflow.com/questions/40892270
复制相似问题