2014-05-07 77 views
1

是否可以使用自定義視圖佈局來聲明沒有包裝根元素的佈局?我有我的自定義視圖的工作,但它始終如果我誇大以下layout.xml父匹配:沒有根元素的Android自定義視圖佈局聲明

custom_view.xml

<?xml version="1.0" encoding="utf-8"?> 
<com.company.ui.CustomView 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_height="@dimen/custom_view_height" 
    android:layout_width="@dimen/custom_view_width" /> 

dimons.xml

<resources> 
    <dimen name="custom_view_height">300dp</dimen> 
    <dimen name="custom_view_width">400dp</dimen> 
</resources> 

但是當自定義視圖加載並附加時,我看到它的計算大小(從onMeasure)是設備屏幕的大小。

我真的需要聲明layout.xml爲:

custom_view.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" > 
    <com.company.ui.CustomView 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_height="@dimen/custom_view_height" 
     android:layout_width="@dimen/custom_view_width" /> 
</LinearLayout> 

,我其實不關心的LinearLayout我也不這似乎有點毫無意義想要記住我投入到膨脹的R.layout.custom_view中的內容。

回答

2

哇,這很有趣!由於下面的文章:

http://www.doubleencore.com/2013/05/layout-inflation-as-intended/

基本上,如果你膨脹的佈局沒有指定的父,佈局XML的根中指定的所有layout_xxx屬性被丟棄。你應該誇大你的佈局爲

inflater.inflate(R.layout.your_layout, parent, false);

而且,請注意,如果您傳遞true(附加到根),返回的元素將在父元素。請注意這一點,因爲它可能會導致問題,當你期望返回膨脹的佈局!