自定义ViewGroup在“视图层次结构”中创建两个节点

时间:2014-03-05 21:56:36

标签: android android-layout

我有一个自定义视图,它使用布局来扩充其中的子视图。

创建并增加此视图时,视图层次结构有两个加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>

1 个答案:

答案 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>