我有以下自定义视图,该视图基于RelativeLayout
:
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 :(得分:7)
对于可能仍在努力解决此问题的任何人,您应该在merge标记内指定parentTag属性。您还需要指定layout_height和layout_width才能使其正常工作。
<merge
tools:parentTag="android.widget.RelativeLayout"
tools:layout_width="match_parent"
tools:layout_height="match_parent"
>
// Child Views
</merge>
编辑器现在应该正确显示所有内容。
答案 1 :(得分:1)
合并对LinearLayout和FrameLayout有用,它不适合RelativeLayout。
显然,在这种情况下使用作品是因为活动的内容视图的父级始终是FrameLayout。如果您的布局使用LinearLayout作为其根标记,则无法应用此技巧。但是在其他情况下可能会有用。