android - 当我将 android:ems 的值放入 dimens.xml 时,为什么我的应用程序会崩溃?
问题描述
我从 Android 开始,我试图将我的所有尺寸都放在 dimens.xml 中。我尝试了相同的方法android:ems
,但它导致应用程序崩溃。
我认为我可以将维度资源用于 ems 值。通过这种方式,我可以将所有 em 的值放在同一个文件中。
这是布局代码:
<EditText
android:id="@+id/editName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/textContact"
android:imeOptions="actionNext"
android:inputType="textCapWords"
android:ems="@dimen/act_cont_editName_ems">
<requestFocus/>
</EditText>
这是 dimens.xml 中的代码
<dimen name="act_cont_editName_ems">14</dimen>
但是,该应用程序仅在我使用时才能正常运行android:ems="14"
我想 dimens 资源文件仅用于 dp 和 sp 值,不确定。如果是这样,是否有另一种方法可以将所有 ems 值保存在资源文件中?
解决方案
在 dimens.xml 中配置的所有维度都必须有单位,并且在 dimens.xml 中支持六个单位。
常用的单位有 sp(与尺度无关的像素)、dp(与密度无关的像素)、px(像素像素),此外还支持 in(英寸)、mm(毫米)和 pt(72 DPI 时的点数)。
要在 xml 中引用上述定义的尺寸,可以使用@dimen/sizeA。要在您的代码中引用上述定义的维度,您可以使用
getResources().getDimension(R.dimen.sizeB);
但是在布局中,会经常用到一些不带单位的常量值,比如在LinearLayout中设置每个children的权重值(android:layout_weight),在TextView中设置行距倍数(android:lineSpacingMultiplier) . 这些值无法通过直接定义的方式保存在dimens.xml中,如下不带单位。
<dimen name="sizeD">18</dimen>
<dimen name="sizeE">5.5</dimen>
在dimens.xml中保存不带单位的值
要在 dimensions.xml 中保存不带单位的值,可以按以下格式定义。
<item name="text_line_spacing" type="dimen" format="float">1.2</item>
推荐阅读
- python - 我在完成在线教程时收到 OSError,但我自己无法弄清楚
- .net - TokenAcquisition 失败时如何处理 MicrosoftIdentityWebChallengeUserException?
- hash - 为什么我的程序会错误地计算 MD2 哈希?
- sql - 我怎样才能更有效地编写这个嵌套查询?
- python - 如何附加来自多个 csv 文件的值?
- python - Django-Auth-App 的 app_secret_key 和 secret_key 之间的区别
- php - 如何在 MySQL 中为 PHP 中的电子商店制作正确的事务和/或锁定表?
- javascript - 解释,“this”语法 JavaScript
- android - 如何为我的 recyclerview 代码创建 Multiple selected?
- terraform - 除了 .id 和 .arn 之外,还有哪些不同的 terraform 资源属性