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>
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
Versuchen Sie, Android:fillViewport="true"
zur ScrollView hinzuzufügen.
Die Lösung hier gefunden: LinearLayout wird nicht in einem ScrollView erweitert
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>
Stellen Sie ScrollView
layout_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>
Ich habe den Fehler dem Google-Team gemeldet.
Sie können es hier ansehen.
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.
Vergessen Sie nicht, wenn Sie den unteren Rand einer Ansicht auf den unteren Rand des Layouts beschränken. Die Bildlaufansicht konnte nicht gescrollt werden.
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 ..!
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.
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.
Vergessen Sie nicht die Eigenschaft tools:context=".YouClassName"
in ScrollView
.
Es ist das, was meine Anwendung zum Absturz gebracht hat.