Android dimens.xml中保存不带单位的数值

原文来源:http://stackoverflow.com/questions/3282390/add-floating-point-value-to-android-resources-values

dimens.xml的一般用法

在dimens.xml中可以保存各种在UI布局时用到的尺寸,例如:

<dimen name="sizeA">18sp</dimen>
<dimen name="sizeB">5.5dp</dimen>
<dimen name="sizeC">10px</dimen>

在dimens.xml中配置的所有尺寸都必须带有单位,dimens.xml中支持的单位一共有6种。常用的单位有sp(scale-independent pixels),dp(density-independent pixels),px(pixels 像素),此外还支持 in (inches),mm (millimeters)和pt (points at 72 DPI)。
要在xml中引用上述定义的dimens,可以使用@dimen/sizeA。
要在代码中引用上述定义的dimens,可以使用getResources().getDimension(R.dimen.sizeB);
但是在布局时会经常使用一些不带单位的常量数值,如在LinearLayout中设置各个children的weight值(android:layout_weight),在TextView中设置行间距倍数(android:lineSpacingMultiplier)。这些数值由于不带单位就不能通过如下直接定义的方式保存在dimens.xml中。

<dimen name="sizeD">18</dimen>
<dimen name="sizeE">5.5</dimen>

在dimens.xml中保存不带单位的数值

要在dimens.xml中保存不带单位的数值,可以用如下格式来定义。

<item name="text_line_spacing" type="dimen" format="float">1.2</item>

在上述定义中,type=”dimen”属性表示定义的item的资源类型是dimen类型。除了可以使用”dimen”外,还可以使用color,string,style等类型,但由于其他类型都可以直接定义,且没有数值的约束,所以一般不需要通过这种方法来定义。format=”float”属性表示定义的数值类型是float类型。除了”float”类型外,还可以使用boolean,fraction,integer等类型。例如:

<item name="top_weight" type="dimen" format="integer">5</item>

要在xml中引用上述定义的dimens,可以使用@dimen/text_line_spacing。
要在代码中引用上述定义的dimens,可以使用如下代码。

TypedValue outValue = new TypedValue();
getResources().getValue(R.dimen.text_line_spacing, outValue, true);
float value = outValue.getFloat();

注意:不能通过getResources().getDimension(R.dimen.text_line_spacing);方式来引用,如果用这种方式引用上述方法定义的dimens,编译时不会报错,但是运行时会抛出NotFoundException。

你可能感兴趣的:(android,布局,尺寸,dimens-xml)