将android:ems的值放在dimens.xml中时,为什么我的应用程序崩溃?

时间:2019-06-26 03:32:44

标签: android ems

我从Android开始,并且试图将所有尺寸都放入dimens.xml中。我为android:ems尝试了相同的方法,但是它导致应用崩溃。

我认为我可以将dims资源用于ems值。这样,我可以将所有ems值存储在同一文件中。

这是布局代码:

        <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值保留在资源文件中吗?

2 个答案:

答案 0 :(得分:0)

没有特殊属性,维度就无法读取值。在此处阅读更多信息:https://developer.android.com/guide/topics/resources/more-resources#Dimension

您可以将ems值保留在xml中

答案 1 :(得分:0)

在dimens.xml中配置的所有维度都必须具有单位,并且dimens.xml中支持六个单位。

除了支持(英寸),mm(毫米)和pt(72 DPI点)之外,常用的单位还包括sp(与比例无关的像素),dp(与密度无关的像素),px(像素像素)。

要在xml中引用上面定义的调光,可以使用@ dimen / sizeA。 要在代码中引用上面定义的调光,可以使用 getResources().getDimension(R.dimen.sizeB);

但是,在布局中,您经常会使用一些无单位的常数值,例如在LinearLayout中设置每个子项的权重值(android:layout_weight),并设置行距倍数(android:lineSpacingMultiplier)在TextView中。这些值无法通过以下直接定义保存在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>