2014-07-11 134 views
0

我試圖從.xml文件中獲得邊距。目前,我正在做它像這樣:從屬性檢索邊距

<ch......MyCustomView 
     android:id="@+id/update_progress" 
     android:layout_width="400dp" 
     android:layout_height="200dp" 
     android:layout_marginLeft="10dp" 
     android:layout_alignParentRight="true" 
     android:visibility="invisible" /> 

mUserDefinedLeftMargin = attrs.getAttributeIntValue("http://schemas.android.com/apk/res/android", "layout_marginLeft", 0); 

其中attrsAttributeSet

.xml看起來是這樣的(它在一個延伸RelativeLayout構造函數或我的類的接收)

mUserDefinedLeftMargin在上述呼叫結束時仍然爲0。爲什麼?

+0

這是因爲DP是不是int值。看看http://stackoverflow.com/questions/8302229/accessing-attrs-in-attributeset-for-custom-components。它是字符串,你應該將它轉換爲點 –

+0

優秀!請將它寫爲迴應,所以我可以接受它 – AndreiBogdan

+1

不這樣做,請改用Context.obtainStyledAttributes(AttributeSet set,int [] attrs),而不需要將像「14.0sp」這樣的字符串轉換爲浮點值 – pskink

回答

1

這是因爲dp不是int值。你應該先把它作爲文本:

String dpSizeText = attrs.getAttributeValue("http://schemas.android.com/apk/res/android", "layout_marginLeft"); 

,從那以後它轉換爲像素:

int dpSizeInt = Integer.parseInt(dpSizeText.substring(0, dpSizeText.indexOf("dp"))); 
Resources r = getResources(); 
float px = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dpSizeInt, r.getDisplayMetrics()); 
+0

@AndreiBogdan請不要這樣做,請改用Context.obtainStyledAttributes(AttributeSet set,int [] attrs)來代替 – pskink