ConstraintLayout的占位符,wrap_content的宽度/高度具有奇怪的行为

时间:2019-10-11 11:52:46

标签: android android-constraintlayout

ConstraintLayout的{​​{1}}与Placeholder的宽度和高度一起使用时,如果将内容设置为占位符本身,则它将在屏幕上占据正确的空间,如下例所示:

wrap_content

Layout output of when the content is set


但是,当未设置任何内容时,它将占用一堆空间(整个区域),而不是宽度/高度为0dp。下面的示例演示:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.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="#999999">

    <View
        android:id="@+id/view_1"
        android:layout_width="0dp"
        android:layout_height="56dp"
        android:background="#990000"
        app:layout_constraintEnd_toStartOf="@+id/action_placeholder_view"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <androidx.constraintlayout.widget.Placeholder
        android:id="@+id/action_placeholder_view"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:content="@+id/button"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="56dp"
        android:text="Button"
        android:visibility="gone"
        tools:ignore="MissingConstraints" />

</androidx.constraintlayout.widget.ConstraintLayout>

Layout output of when the content is not set


是某种<?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.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="#999999"> <View android:id="@+id/view_1" android:layout_width="0dp" android:layout_height="56dp" android:background="#990000" app:layout_constraintEnd_toStartOf="@+id/action_placeholder_view" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> <androidx.constraintlayout.widget.Placeholder android:id="@+id/action_placeholder_view" android:layout_width="wrap_content" android:layout_height="wrap_content" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toTopOf="parent" /> <Button android:id="@+id/button" android:layout_width="wrap_content" android:layout_height="56dp" android:text="Button" android:visibility="gone" tools:ignore="MissingConstraints" /> </androidx.constraintlayout.widget.ConstraintLayout> 错误还是我做错了什么?

上下文:我只想在页面完全加载后设置占位符的内容。


我使用的ConstraintLayout版本是:

  

实现'androidx.constraintlayout:constraintlayout: 1.1.3 '

2 个答案:

答案 0 :(得分:0)

您需要制作一条适当的水平链,以便var shortReviews = []; var elm = document.getElementsByClassName('reviewContainer'); for (var i = 0; i < elm.length; i++) { shortReviews.push(elm[i].innerHTML); } var snappy = document.querySelector("#reviewsSnap").innerHTML = shortReviews.slice(0, 2); snappy.join(''); 知道ConstraintLayout应该对齐的位置,以防它受到约束的视图消失了。您的占位符应为​​view_1

您还可以考虑添加app:layout_constraintStart_toEndOf="@+id/view_1"(或app:emptyVisibility="invisible"),看看它如何影响布局。

答案 1 :(得分:0)

我不确定您为什么要使用占位符(老实说,我不知道为什么会使用这种占位符,因为我从未使用过它们),但这是因为我从来不需要它们。

这就是我要做的:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#999999">

    <View
            android:id="@+id/view_1"
            android:layout_width="0dp"
            android:layout_height="56dp"
            android:background="#990000"
            app:layout_constraintEnd_toStartOf="@+id/button"
            app:layout_constraintHorizontal_chainStyle="packed"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent" />

    <Button
            android:id="@+id/button"
            android:layout_width="wrap_content"
            android:layout_height="56dp"
            android:text="Button"
            android:visibility="visible"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toEndOf="@id/view_1"
            app:layout_constraintTop_toTopOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

如果该按钮可见(如^),则看起来像: Visible

如果该按钮为GONE,则外观如下: Gone

如果按钮不可见,它将保留该空间并看起来像: Invisible

从“消失”或“不可见”开始(取决于您希望UI / UX在该状态下的外观),一旦“完成加载页面”,然后再推入新的视图状态(这将导致按钮变为可见)。

我在这里错过了什么吗?