Android(安卓)dimens.xml中保存不带单位的数值
原文来源:http://stackoverflow.com/questions/3282390/add-floating-point-value-to-android-resources-values
dimens.xml的一般用法
在dimens.xml中可以保存各种在UI布局时用到的尺寸,例如:
<dimen name="sizeA">18spdimen><dimen name="sizeB">5.5dpdimen><dimen name="sizeC">10pxdimen>
在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">18dimen><dimen name="sizeE">5.5dimen>
在dimens.xml中保存不带单位的数值
要在dimens.xml中保存不带单位的数值,可以用如下格式来定义。
<item name="text_line_spacing" type="dimen" format="float">1.2item>
在上述定义中,type=”dimen”属性表示定义的item的资源类型是dimen类型。除了可以使用”dimen”外,还可以使用color,string,style等类型,但由于其他类型都可以直接定义,且没有数值的约束,所以一般不需要通过这种方法来定义。format=”float”属性表示定义的数值类型是float类型。除了”float”类型外,还可以使用boolean,fraction,integer等类型。例如:
<item name="top_weight" type="dimen" format="integer">5item>
要在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(安卓)6.0添加自定义铃声
- android 自定义弹出框AlertDialog
- android编译时如何决定一个APK等Module是否被自动编译到system.i
- 自定义字体| Using a custom typeface in Android
- android 随手记 自定义广播通知栏
- Android中的Adapter简单介绍
- Activity实现自定义Dialog
- [Android(安卓)Pro] Android(安卓)studio jni中调用Log输出调试
- Android(安卓)自定义TitleBar