我有一个自定义视图,它使用布局来扩充其中的子视图。
创建并增加此视图时,视图层次结构有两个加n个视图:
MyCustomView -> RelativeLayout -> {subview1, subview2,…}
有没有办法消除RelativeLayout节点?
相关课程:
class MyCustomView extends RelativeLayout {
...
public void start(Context context) {
final LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
inflater.inflate(R.layout.view_custom, this);
}
...
}
相关XML:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/root"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#232323">
<TextView
android:id="@+id/tv_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_toRightOf="@+id/view_video"
android:paddingTop="@dimen/activity_vertical_margin_medium"
android:paddingBottom="@dimen/activity_vertical_margin_slim"
android:paddingRight="@dimen/activity_vertical_margin_medium"
android:gravity="left"
android:text="@string/video_title"
android:textSize="@dimen/text_size_largest"
android:textColor="@color/text_login_gray"
android:textAllCaps="true"
android:background="#232323" />
<TextView
android:id="@+id/tv_desc"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/tv_title"
android:layout_alignLeft="@+id/tv_title"
android:paddingBottom="@dimen/activity_vertical_margin_medium"
android:paddingRight="@dimen/activity_vertical_margin_medium"
android:gravity="left"
android:text="@string/video_desc"
android:textSize="@dimen/text_size_small"
android:textColor="@color/text_very_light_gray"
android:background="#232323" />
</RelativeLayout>
答案 0 :(得分:0)
执行此操作的正确方法是使用合并标记。
这具有删除根节点上的无意义属性的附加好处。
在某些情况下,这会在“预览”中产生视觉错误。 此时我不知道有任何修复方法。
<?xml version="1.0" encoding="utf-8"?>
<merge xmlns:android="http://schemas.android.com/apk/res/android">
<TextView
android:id="@+id/tv_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_toRightOf="@+id/view_video"
android:paddingTop="@dimen/activity_vertical_margin_medium"
android:paddingBottom="@dimen/activity_vertical_margin_slim"
android:paddingRight="@dimen/activity_vertical_margin_medium"
android:gravity="left"
android:text="@string/video_title"
android:textSize="@dimen/text_size_largest"
android:textColor="@color/text_login_gray"
android:textAllCaps="true"
android:background="#232323" />
<TextView
android:id="@+id/tv_desc"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/tv_title"
android:layout_alignLeft="@+id/tv_title"
android:paddingBottom="@dimen/activity_vertical_margin_medium"
android:paddingRight="@dimen/activity_vertical_margin_medium"
android:gravity="left"
android:text="@string/video_desc"
android:textSize="@dimen/text_size_small"
android:textColor="@color/text_very_light_gray"
android:background="#232323" />
</merge>