web-dev-qa-db-de.com

Kann ein ConstraintLayout in eine ScrollView eingefügt werden?

In letzter Zeit gibt es mit Android Studio 2.2 ein neues ConstraintLayout, das das Entwerfen erheblich vereinfacht. Im Gegensatz zu RelativeLayout und Linearlayout kann ich jedoch keine ScrollView verwenden, um ConstraintLayot zu umgeben. Ist das möglich? Wenn das so ist, wie? 

d.h. 

<ScrollView 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"
        tools:layout_editor_absoluteX="0dp"
        tools:layout_editor_absoluteY="0dp">

        <Android.support.constraint.ConstraintLayout
            Android:id="@+id/constraintLayout"
            Android:layout_width="match_parent"
            Android:layout_height="match_parent"
            tools:layout_editor_absoluteX="0dp"
            tools:layout_editor_absoluteY="0dp">

            <!-- Have whatever children you want inside -->

        </Android.support.constraint.ConstraintLayout>

</ScrollView>
58
Seth Painter

In ScrollViews ist ein Fehler mit ConstraintLayout aufgetreten, der behoben wurde. Google hat den Fehler in Android Studio 2.2 Preview 2 (Constraintlayout 1.0.0-alpha2) behoben. 

Überprüfen Sie diesen Link auf ein neues Update (Vorschau 2): Funktioniert ordnungsgemäß in ScrollView und RecycleView

29
Govinda Paliwal

Versuchen Sie, Android:fillViewport="true" zur ScrollView hinzuzufügen.

Die Lösung hier gefunden: LinearLayout wird nicht in einem ScrollView erweitert

143
eric.mcgregor

use NestedScrollView mit Viewport true funktioniert gut für mich 

<Android.support.v4.widget.NestedScrollView
        Android:layout_width="match_parent"
        Android:layout_height="match_parent"
        Android:fillViewport="true">

        <Android.support.constraint.ConstraintLayout
            Android:layout_width="match_parent"
            Android:layout_height="700dp">

        </Android.support.constraint.ConstraintLayout>

</Android.support.v4.widget.NestedScrollView>
23
rajesh vinew

Stellen Sie ScrollViewlayout_height als wrap_content ein, dann funktioniert es einwandfrei. Nachfolgend finden Sie ein Beispiel, das jemandem helfen kann. Ich habe compile 'com.Android.support.constraint:constraint-layout:1.0.2' für das Constraint-Layout verwendet.

<?xml version="1.0" encoding="utf-8"?>
<Android.support.constraint.ConstraintLayout
    Android:orientation="vertical"
    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:id="@+id/activity_main"
    tools:context=".ScrollViewActivity">

    <ScrollView
        Android:layout_width="0dp"
        Android:layout_height="wrap_content"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        >

        <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="wrap_content"
            Android:orientation="vertical"
            Android:paddingLeft="8dp"
            Android:paddingRight="8dp"
            Android:scrollbars="vertical">

            <TextView
                Android:id="@+id/tvCommonSurname"
                Android:layout_width="wrap_content"
                Android:layout_height="wrap_content"
                Android:text="surname"
                Android:textAppearance="?android:attr/textAppearanceLarge"
                app:layout_constraintLeft_toLeftOf="parent"
                app:layout_constraintTop_toTopOf="parent"
                tools:layout_constraintLeft_creator="1"
                tools:layout_constraintTop_creator="1" />

            <EditText
                Android:id="@+id/editText3"
                Android:layout_width="0dp"
                Android:layout_height="wrap_content"
                Android:layout_marginTop="8dp"
                Android:ems="10"
                Android:inputType="text"
                Android:maxLines="1"
                app:layout_constraintLeft_toLeftOf="parent"
                app:layout_constraintRight_toRightOf="parent"
                app:layout_constraintTop_toBottomOf="@+id/tvCommonSurname"
                tools:layout_constraintLeft_creator="1"
                tools:layout_constraintRight_creator="1"
                tools:layout_constraintTop_creator="1" />

            <TextView
                Android:id="@+id/tvCommonName"
                Android:layout_width="wrap_content"
                Android:layout_height="wrap_content"
                Android:layout_marginTop="8dp"
                Android:text="firstName"
                Android:textAppearance="?android:attr/textAppearanceLarge"
                app:layout_constraintLeft_toLeftOf="parent"
                app:layout_constraintTop_toBottomOf="@+id/editText3"
                tools:layout_constraintLeft_creator="1"
                tools:layout_constraintTop_creator="1" />

            <EditText
                Android:id="@+id/editText"
                Android:layout_width="0dp"
                Android:layout_height="wrap_content"
                Android:layout_marginTop="8dp"
                Android:ems="10"
                Android:inputType="text"
                Android:maxLines="1"
                app:layout_constraintLeft_toLeftOf="parent"
                app:layout_constraintRight_toRightOf="parent"
                app:layout_constraintTop_toBottomOf="@+id/tvCommonName"
                tools:layout_constraintLeft_creator="1"
                tools:layout_constraintRight_creator="1"
                tools:layout_constraintTop_creator="1" />

            <TextView
                Android:id="@+id/tvCommonLastName"
                Android:layout_width="wrap_content"
                Android:layout_height="wrap_content"
                Android:layout_marginTop="8dp"
                Android:text="middleName"
                Android:textAppearance="?android:attr/textAppearanceLarge"
                app:layout_constraintLeft_toLeftOf="parent"
                app:layout_constraintTop_toBottomOf="@+id/editText"
                tools:layout_constraintLeft_creator="1"
                tools:layout_constraintTop_creator="1" />

            <EditText
                Android:id="@+id/editText2"
                Android:layout_width="0dp"
                Android:layout_height="wrap_content"
                Android:layout_marginTop="8dp"
                Android:ems="10"
                Android:inputType="text"
                Android:maxLines="1"
                app:layout_constraintLeft_toLeftOf="parent"
                app:layout_constraintRight_toRightOf="parent"
                app:layout_constraintTop_toBottomOf="@+id/tvCommonLastName"
                tools:layout_constraintLeft_creator="1"
                tools:layout_constraintRight_creator="1"
                tools:layout_constraintTop_creator="1" />

            <TextView
                Android:id="@+id/tvCommonPhone"
                Android:layout_width="wrap_content"
                Android:layout_height="wrap_content"
                Android:layout_marginTop="8dp"
                Android:text="Phone number"
                Android:textAppearance="?android:attr/textAppearanceLarge"
                app:layout_constraintLeft_toLeftOf="parent"
                app:layout_constraintTop_toBottomOf="@+id/editText2"
                tools:layout_constraintLeft_creator="1"
                tools:layout_constraintTop_creator="1" />

            <EditText
                Android:id="@+id/editText4"
                Android:layout_width="0dp"
                Android:layout_height="wrap_content"
                Android:layout_marginTop="8dp"
                Android:digits="0123456789"
                Android:ems="10"
                Android:inputType="phone"
                Android:maxLength="10"
                Android:maxLines="1"
                app:layout_constraintLeft_toLeftOf="parent"
                app:layout_constraintRight_toRightOf="parent"
                app:layout_constraintTop_toBottomOf="@+id/tvCommonPhone"
                tools:layout_constraintLeft_creator="1"
                tools:layout_constraintRight_creator="1"
                tools:layout_constraintTop_creator="1" />

            <TextView
                Android:id="@+id/textView3"
                Android:layout_width="wrap_content"
                Android:layout_height="wrap_content"
                Android:layout_marginTop="8dp"
                Android:text="sex"
                Android:textAppearance="?android:attr/textAppearanceLarge"
                app:layout_constraintLeft_toLeftOf="parent"
                app:layout_constraintTop_toBottomOf="@+id/editText4"
                tools:layout_constraintLeft_creator="1"
                tools:layout_constraintTop_creator="1" />

            <RadioGroup 
                xmlns:Android="http://schemas.Android.com/apk/res/Android"
                Android:id="@+id/radiogroup"
                Android:layout_width="0dp"
                Android:layout_height="48dp"
                Android:layout_marginTop="8dp"
                Android:orientation="horizontal"
                app:layout_constraintLeft_toLeftOf="parent"
                app:layout_constraintTop_toBottomOf="@+id/textView3"
                tools:layout_constraintLeft_creator="1"
                tools:layout_constraintTop_creator="1">

                <RadioButton
                    Android:layout_width="wrap_content"
                    Android:layout_height="wrap_content"
                    Android:text="pirates" />

                <RadioButton
                    Android:layout_width="wrap_content"
                    Android:layout_height="wrap_content"
                    Android:text="ninjas" />
            </RadioGroup>

            <TextView
                Android:id="@+id/tvCommonDOB"
                Android:layout_width="wrap_content"
                Android:layout_height="wrap_content"
                Android:layout_marginTop="8dp"
                Android:text="dob"
                Android:textAppearance="?android:attr/textAppearanceLarge"
                app:layout_constraintLeft_toLeftOf="parent"
                app:layout_constraintTop_toBottomOf="@+id/radiogroup"
                tools:layout_constraintLeft_creator="1"
                tools:layout_constraintTop_creator="1" />

            <EditText
                Android:id="@+id/editText5"
                Android:layout_width="0dp"
                Android:layout_height="wrap_content"
                Android:layout_marginTop="8dp"
                Android:ems="10"
                Android:inputType="date"
                Android:maxLines="1"
                app:layout_constraintLeft_toLeftOf="parent"
                app:layout_constraintRight_toRightOf="parent"
                app:layout_constraintTop_toBottomOf="@+id/tvCommonDOB"
                tools:layout_constraintLeft_creator="1"
                tools:layout_constraintRight_creator="1"
                tools:layout_constraintTop_creator="1" />

            <TextView
                Android:id="@+id/tvCommonLivingCity"
                Android:layout_width="wrap_content"
                Android:layout_height="wrap_content"
                Android:layout_marginTop="8dp"
                Android:text="livingCity"
                Android:textAppearance="?android:attr/textAppearanceLarge"
                app:layout_constraintLeft_toLeftOf="parent"
                app:layout_constraintTop_toBottomOf="@+id/editText5"
                tools:layout_constraintLeft_creator="1"
                tools:layout_constraintTop_creator="1" />

            <EditText
                Android:id="@+id/editText34"
                Android:layout_width="0dp"
                Android:layout_height="wrap_content"
                Android:layout_marginTop="8dp"
                Android:ems="10"
                Android:inputType="text"
                Android:maxLines="1"
                app:layout_constraintLeft_toLeftOf="parent"
                app:layout_constraintRight_toRightOf="parent"
                app:layout_constraintTop_toBottomOf="@+id/tvCommonLivingCity"
                tools:layout_constraintLeft_creator="1"
                tools:layout_constraintRight_creator="1"
                tools:layout_constraintTop_creator="1" />

            <TextView
                Android:id="@+id/tvCommonPlaceOfBithday"
                Android:layout_width="wrap_content"
                Android:layout_height="wrap_content"
                Android:layout_marginTop="8dp"
                Android:text="placeOfBirth"
                Android:textAppearance="?android:attr/textAppearanceLarge"
                app:layout_constraintLeft_toLeftOf="parent"
                app:layout_constraintTop_toBottomOf="@+id/editText34"
                tools:layout_constraintLeft_creator="1"
                tools:layout_constraintTop_creator="1" />

            <EditText
                Android:id="@+id/editText6"
                Android:layout_width="0dp"
                Android:layout_height="wrap_content"
                Android:layout_marginTop="8dp"
                Android:ems="10"
                Android:inputType="text"
                Android:maxLines="1"
                app:layout_constraintLeft_toLeftOf="parent"
                app:layout_constraintRight_toRightOf="parent"
                app:layout_constraintTop_toBottomOf="@+id/tvCommonPlaceOfBithday"
                tools:layout_constraintLeft_creator="1"
                tools:layout_constraintRight_creator="1"
                tools:layout_constraintTop_creator="1" />

            <TextView
                Android:id="@+id/textView4"
                Android:layout_width="wrap_content"
                Android:layout_height="wrap_content"
                Android:layout_marginTop="8dp"
                Android:text="education"
                Android:textAppearance="?android:attr/textAppearanceLarge"
                app:layout_constraintLeft_toLeftOf="parent"
                app:layout_constraintTop_toBottomOf="@+id/editText6"
                tools:layout_constraintLeft_creator="1"
                tools:layout_constraintTop_creator="1" />

            <Spinner
                Android:id="@+id/spinner_id"
                Android:layout_width="0dp"
                Android:layout_height="48dp"
                Android:layout_marginTop="8dp"
                Android:spinnerMode="dialog"
                app:layout_constraintLeft_toLeftOf="parent"
                app:layout_constraintRight_toRightOf="parent"
                app:layout_constraintTop_toBottomOf="@+id/textView4"
                tools:layout_constraintLeft_creator="1"
                tools:layout_constraintRight_creator="1"
                tools:layout_constraintTop_creator="1" />

        </Android.support.constraint.ConstraintLayout>
    </ScrollView>


</Android.support.constraint.ConstraintLayout>
7
Sakib Syed

Ich habe den Fehler dem Google-Team gemeldet.

Sie können es hier ansehen.

5
amorenew

Ich habe 2 Tage lang versucht, Layouts in ConstraintLayout in der so genannten "stable" -Version Android Studio 2.2 zu konvertieren, und ich habe nicht ScrollView im Designer arbeiten können. Ich fange nicht mit dem Hinzufügen von Einschränkungen in XML für Views an, die weiter unten im Bildlauf liegen. Schließlich soll dies ein visuelles Gestaltungswerkzeug sein. 

Die Anzahl der Rendering-Fehler, Stack-Überläufe und Design-Probleme hat mich zu dem Schluss gebracht, dass die gesamte ConstraintLayout-Implementierung immer noch mit Fehlern durchsetzt ist. Wenn Sie nicht einfache Layouts entwickeln, würde ich es gut in Ruhe lassen, bis es mindestens einige weitere Iterationen gab.

Das sind zwei Tage, an denen ich nicht zurückkomme. 

3
SimonH

Vergessen Sie nicht, wenn Sie den unteren Rand einer Ansicht auf den unteren Rand des Layouts beschränken. Die Bildlaufansicht konnte nicht gescrollt werden.

1
ahmetvefa53

Neues Android-Studio nach 2.2 ConstraintLayout funktioniert jetzt ordnungsgemäß in ScrollView.

Wie das folgende Beispiel:

<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">
<ScrollView
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content">

        <Android.support.constraint.ConstraintLayout
            Android:layout_width="match_parent"
            Android:layout_height="wrap_content">
</Android.support.constraint.ConstraintLayout>
    </ScrollView>
</Android.support.constraint.ConstraintLayout>

Ich hoffe es hilft dir ..!

0
Viral Patel

Da die tatsächliche ScrollView in einer CoordinatorLayout mit einer Toolbar eingekapselt ist ...

<?xml version="1.0" encoding="utf-8"?>
<Android.support.design.widget.CoordinatorLayout
    xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:tools="http://schemas.Android.com/tools"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent">

    <Android.support.design.widget.AppBarLayout
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:theme="@style/AppTheme.AppBarOverlay">

        <Android.support.v7.widget.Toolbar
            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="?attr/actionBarSize"
            Android:background="?attr/colorPrimary"
            app:popupTheme="@style/AppTheme.PopupOverlay"/>

    </Android.support.design.widget.AppBarLayout>

    <include layout="@layout/list"/>

</Android.support.design.widget.CoordinatorLayout>

... Ich musste Android:layout_marginTop="?attr/actionBarSize" definieren, damit das Scrollen funktioniert:

<?xml version="1.0" encoding="utf-8"?>
<ScrollView
    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="wrap_content"
    Android:layout_marginTop="?attr/actionBarSize">

    <Android.support.constraint.ConstraintLayout
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        app:layout_behavior="@string/appbar_scrolling_view_behavior">

        <!-- UI elements here -->

    </Android.support.constraint.ConstraintLayout>

</ScrollView>

Oben funktioniert auch mit NestedScrollView anstelle von ScrollView. Das Definieren von Android:fillViewport="true" ist für mich nicht erforderlich.

0
JJD

Ich hatte einen Fehler, dass ConstraintLayout nicht erlaubt ist, dann habe ich Android.support.constraint.ConstraintLayout hinzugefügt und funktioniert. Ich bin ein Anfänger und verstehe nicht warum.

0

Vergessen Sie nicht die Eigenschaft tools:context=".YouClassName" in ScrollView.

Es ist das, was meine Anwendung zum Absturz gebracht hat.

0
Dmitry