首页 > 解决方案 > 当我将 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 值保存在资源文件中?

标签: androidems

解决方案


在 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>

推荐阅读