it-swarm.com.ru

Можно ли разместить ConstraintLayout внутри ScrollView?

Совсем недавно в Android Studio 2.2 появился новый ConstraintLayout, который значительно упрощает проектирование, но в отличие от RelativeLayout и Linearlayout, я не могу использовать ScrollView для окружения ConstraintLayot. Это возможно? Если так, то как? 

то есть 

<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

Была ошибка с ConstraintLayout внутри ScrollViews, и она была исправлена. Google исправил ошибку в Android Studio 2.2 Preview 2 (constraintlayout 1.0.0-alpha2). 

Проверьте эту ссылку на новое обновление (предварительный просмотр 2): правильно работает внутри ScrollView и RecycleView

29
Govinda Paliwal

Попробуйте добавить Android:fillViewport="true" в ScrollView.

Нашел решение здесь: LinearLayout не расширяется внутри ScrollView

143
eric.mcgregor

использовать NestedScrollView с окном просмотра true работает хорошо для меня 

<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

Установите ScrollViewlayout_height в качестве wrap_content, тогда он будет работать нормально. Ниже приведен пример, который может помочь кому-то . Я использовал compile 'com.Android.support.constraint:constraint-layout:1.0.2' для макета ограничения.

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

Я сообщил об ошибке в команду Google.

Вы можете просмотреть его здесь .

5
amorenew

Я потратил 2 дня, пытаясь преобразовать макеты в ConstraintLayout в так называемом «стабильном» выпуске Android Studio 2.2, и у меня нет ScrollView для работы в конструкторе. Я не собираюсь начинать с маршрута добавления ограничений в XML для Views, которые находятся дальше по спирали. Ведь это должен быть инструмент визуального дизайна. 

А количество ошибок рендеринга, переполнения стека и проблем с темой привело меня к выводу, что вся реализация ConstraintLayout все еще полна ошибок. Если вы не разрабатываете простые макеты, я бы оставил их в покое, пока не будет еще как минимум несколько итераций.

Вот уже 2 дня я не собираюсь возвращаться. 

3
SimonH

Не забывайте, что если вы ограничиваете нижнюю часть представления до нижней части макета ограничения. Scrollview не может прокрутить.

1
ahmetvefa53

Новая Android-студия после 2.2 ConstraintLayout теперь правильно работает в ScrollView.

Как этот пример ниже:

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

Я надеюсь, что это поможет вам ..!

0
Viral Patel

Поскольку фактическая ScrollView инкапсулирована в CoordinatorLayout с Toolbar ...

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

... Я должен был определить Android:layout_marginTop="?attr/actionBarSize", чтобы прокрутка работала:

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

Выше также работает с NestedScrollView вместо ScrollView. Определение Android:fillViewport="true" мне не нужно.

0
JJD

У меня была ошибка, что ConstraintLayout не разрешен, затем я добавил Android.support.constraint.ConstraintLayout и работает. Я новичок и не понимаю почему.

0
Cristi Băluță

Не забудьте про свойство tools:context=".YouClassName" в ScrollView.

Это то, что вызывало сбой моего приложения.

0
Dmitry