如何在constraintlayout 中创建容器以便我可以设置背景?

Vin*_*nce 5 java xml android android-constraintlayout

如何在不嵌套视图组的情况下对约束布局中的视图进行分组?

<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:app="http://schemas.android.com/apk/res-auto"
  xmlns:tools="http://schemas.android.com/tools"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:orientation="vertical"
  android:background="@color/color1">

<ImageView
    android:id="@+id/mAlbumArtLarge"
    android:layout_width="0dp"
    android:layout_height="0dp"
    android:scaleType="fitXY"
    android:src="@drawable/image1"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    tools:ignore="ContentDescription" />

<android.support.constraint.ConstraintLayout
    android:id="@+id/mBottomSheet"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:background="#20000000"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintTop_toTopOf="parent">

        <ImageView
         android:id="@+id/mAlbumIvBottom"
         android:layout_width="50dp"
         android:layout_height="50dp"
         android:layout_margin="5dp"
         android:scaleType="fitXY"
         app:layout_constraintBottom_toBottomOf="parent"
         app:layout_constraintStart_toStartOf="parent"
         app:layout_constraintTop_toTopOf="parent" />

</android.support.constraint.ConstraintLayout>
</android.support.constraint.ConstraintLayout>
Run Code Online (Sandbox Code Playgroud)

这就是我现在正在做的事情来创建一个容器mBottomSheet,我可以在其中对视图进行分组并设置背景,但是我constraintlayout为此使用了另一个视图组,这是不推荐的,因为约束布局的点太具有平面视图层次结构。

那么我怎样才能实现同样的事情,但不使用另一个视图组作为容器呢?

编辑

例子:

在此处输入图片说明

Tam*_*bul 3

您可以使用Gudeliens来实现类似的目标。

例如,您可以采取一些视图(我们称之为x)并将其放置在您的布局上,然后将所有想要的视图放在上面x

至于古德利安,有了他们,你可以x使用属性以任何你想要使用的方式放置你的app:layout_constraintGuide_percent物品。

以此布局为例:

<android.support.constraint.ConstraintLayout 
  xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:app="http://schemas.android.com/apk/res-auto"
  xmlns:tools="http://schemas.android.com/tools"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:background="@color/colorPrimary"
  android:orientation="vertical">

<ImageView
    android:id="@+id/mAlbumIvBottom"
    android:layout_width="0dp"
    android:layout_height="0dp"
    android:background="@drawable/ic_launcher_background"
    android:scaleType="fitXY"
    android:elevation="6dp"
    android:layout_margin="6dp"
    app:layout_constraintBottom_toTopOf="@+id/guideline6"
    app:layout_constraintEnd_toStartOf="@+id/guideline7"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="@+id/button2" />

<Button
    android:id="@+id/button2"
    android:layout_width="0dp"
    android:layout_height="0dp"
    android:text="I am view x"
    app:layout_constraintBottom_toTopOf="@+id/guideline6"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent" />


<android.support.constraint.Guideline
    android:id="@+id/guideline6"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    app:layout_constraintGuide_percent=".15" />

<android.support.constraint.Guideline
    android:id="@+id/guideline7"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    app:layout_constraintGuide_percent=".3" />


</android.support.constraint.ConstraintLayout>
Run Code Online (Sandbox Code Playgroud)

此布局将如下所示,没有任何嵌套视图:(我添加预览图像,以便您可以更好地理解指南)

在此输入图像描述

上面的布局是如何在不使用嵌套视图组的情况下实现此目的的示例。


该解决方案适合您,但我也同意user1506104。有一个非常小的嵌套级别是可以的,如果你不过分,你的布局性能可以保持不变

  • 您可以采用我的解决方案,也可以使用一些嵌套视图(再次强调,不要过度),我更喜欢使用我的解决方案,这样我就可以避免嵌套。

  • 请记住,我的解决方案可能比创建布局时仅使用一些嵌套杠杆要长一些。