そのため最近、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>
ScrollViews内のConstraintLayoutにバグがあり、修正されました。 GoogleはAndroid Studio 2.2 Preview 2(constraintlayout 1.0.0-alpha2)のバグを修正しました。
新しいアップデートについては、このリンクを確認してください(プレビュー2): ScrollViewおよびRecycleView内で適切に動作します
Android:fillViewport="true"
をScrollViewに追加してみてください。
ここで解決策を見つけました: LinearLayoutはScrollView内で拡大しません
ビューポートを使用してNestedScrollView
を使用する
<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>
ScrollView
layout_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>
バグをGoogleチームに報告しました。
あなたはそれを見ることができます こちら 。
いわゆる「安定版」リリースAndroid Studio 2.2でレイアウトをConstraintLayout
に変換しようとして2日間を費やしましたが、デザイナーで作業するScrollView
がありません。スクロールのさらに下にあるViews
のXMLに制約を追加するルートを開始するつもりはありません。結局のところ、これは視覚的なデザインツールになるはずです。
そして、レンダリングエラー、スタックオーバーフロー、テーマの問題の数から、ConstraintLayout
実装全体にバグがまだまだあると結論付けられました。単純なレイアウトを開発しているのでない限り、少なくとも数回反復するまではそのままにしておきます。
それは私が取り戻すつもりはない2日間です。
実際の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"
を定義する必要はありません。
ビューの下部をレイアウトの下部に制限すると、Scrollviewはスクロールできなかったことを忘れないでください。
2.2 ConstraintLayoutの後の新しいAndroidスタジオは、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>
私はそれがあなたを助けることを願っています..!
ConstraintLayoutが許可されていないというエラーが発生したため、Android.support.constraint.ConstraintLayoutを追加して動作しています。私は初心者なので、理由がわかりません。
ScrollView
のtools:context=".YouClassName"
プロパティを忘れないでください。
それが私のアプリケーションのクラッシュの原因でした。