2013-05-29 80 views
3

我有基於RelativeLayout以下自定義視圖:<merge/>自定義視圖中的XML佈局

public class LearningModeRadioButton extends 
             RelativeLayout 
            implements 
             Checkable, 
             View.OnClickListener { 

    private void init(Context context, AttributeSet attrs) { 
     LayoutInflater.from(context).inflate(R.layout.rb_learning_mode, this, true); 
    } 
} 

R.layout.rb_learning_mode內容是:

<?xml version="1.0" encoding="utf-8"?> 

<merge 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     > 

    <RadioButton 
      android:id="@+id/rb" 
      android:button="@drawable/sel_rb_button" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      /> 

    <TextView 
      android:id="@+id/tv_mode_title" 
      style="@style/text_regular" 
      android:layout_toRightOf="@+id/rb" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      /> 

    <TextView 
      android:id="@+id/tv_description" 
      style="@style/text_small" 
      android:layout_below="@+id/tv_mode_title" 
      android:layout_alignLeft="@+id/tv_mode_title" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      /> 

</merge> 

它有點工作,但佈局參數(layout_xxx)被忽略。我可以使用另一個<RelativeLayout/>作爲佈局的根元素,但我想避免在視圖層次結構中具有額外的級別。

所以問題是:如何使<merge/>工作內的佈局屬性工作?

+0

找不到東西?我有完全相同的問題。它在最後工作,但在編輯看起來醜陋... – Redwarp

+0

@Redwarp不,我剛剛結束了使用額外的'RelativeLayout' :( –

回答

1

合併對LinearLayout和FrameLayout非常有用,它不適合RelativeLayout。

顯然,在這種情況下使用作品,因爲活動內容視圖的父項始終是FrameLayout。例如,如果您的佈局使用LinearLayout作爲其根標籤,則無法應用此技巧。但在其他情況下可以使用。

check this:

1

對於任何可能仍然可以用這種掙扎,你應該指定合併標籤內的parentTag屬性。您還需要指定layout_height和layout_width以使其工作。

<merge 
    tools:parentTag="android.widget.RelativeLayout" 
    tools:layout_width="match_parent" 
    tools:layout_height="match_parent" 
> 
// Child Views 
</merge> 

編輯器現在應該正確顯示所有內容。