1. 程式人生 > >Android dimens.xml中儲存不帶單位的數值

Android dimens.xml中儲存不帶單位的數值

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。