【问题标题】:Custom ViewGroup creates two nodes in View Hierarchy自定义 ViewGroup 在 View Hierarchy 中创建两个节点
【发布时间】:2014-03-06 06:13:43
【问题描述】:

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

当这个视图被创建和膨胀时,视图层次结构有两个加 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>

【问题讨论】:

  • 当我用 'merge' 替换 RelativeLayout 时,如何修复 Android Studio 预览中的时髦外观?

标签: android android-layout


【解决方案1】:

正确的做法是使用合并标签。

这具有删除根节点上无意义的属性的额外好处。

在某些情况下,这会在“预览”中产生视觉错误。 目前我不知道有任何解决办法。

<?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>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多