12/13前後のフィールドがあるフォームがあります。制約レイアウト内でScrollview
を使用しました。以下は、XMLレイアウトの階層です。問題は、一番下までスクロールせず、最初の最初の10ビューまでしかスクロールしないことです。ビューがそれ以上スクロールしないため、最後の3つのフィールドは非表示になります。
親のレイアウト
<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:id="@+id/activity_register"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:focusableInTouchMode="true"
Android:orientation="vertical">
<!-- Textview and a button -->
<ScrollView
Android:id="@+id/scrollView"
Android:layout_width="0dp"
Android:layout_height="wrap_content"
Android:layout_marginBottom="10dp"
Android:layout_marginTop="10dp"
Android:orientation="vertical"
Android:overScrollMode="never"
Android:scrollbars="none"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@+id/view"
tools:layout_constraintBottom_creator="1"
tools:layout_constraintLeft_creator="1"
tools:layout_constraintRight_creator="1"
tools:layout_constraintTop_creator="1"
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="wrap_content"
Android:orientation="vertical">
<!-- Child Views (12/13 views of the fields)-->
</Android.support.constraint.ConstraintLayout>
</ScrollView>
</Android.support.constraint.ConstraintLayout>
このレイアウトは私のアプリで動作します。秘Viewは、ScrollViewで次の2つの属性を設定することです。Android:layout_height = "0dp" app:layout_constraintBottom_toBottomOf = "parent"
私のアプリのシンプルなレイアウト:
<?xml version="1.0" encoding="utf-8"?>
<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"
Android:theme="@style/ThemeOverlay.AppCompat.Light">
<RelativeLayout
Android:id="@+id/linear"
Android:layout_width="0dp"
Android:layout_height="56dp"
Android:background="@color/title"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<ScrollView
Android:layout_width="0dp"
Android:layout_height="0dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@id/linear">
<Android.support.constraint.ConstraintLayout
Android:layout_width="match_parent"
Android:layout_height="wrap_content">
<TextView
Android:id="@+id/titleView"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_marginLeft="8dp"
Android:layout_marginStart="8dp"
Android:text="@string/title"
Android:textSize="14sp"
app:layout_constraintBaseline_toBaselineOf="@+id/title"
app:layout_constraintLeft_toLeftOf="parent" />
<EditText
Android:id="@+id/title"
Android:layout_width="0dp"
Android:layout_height="wrap_content"
Android:layout_marginEnd="8dp"
Android:layout_marginRight="8dp"
Android:hint="toilet title"
Android:inputType="text"
Android:textColor="@Android:color/holo_red_dark"
Android:textSize="12sp"
app:layout_constraintLeft_toLeftOf="@+id/open_hour"
app:layout_constraintLeft_toRightOf="@+id/titleView"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
...
Other Views in ScrollView
...
</Android.support.constraint.ConstraintLayout>
</ScrollView>
</Android.support.constraint.ConstraintLayout>
私の場合、NestedScrollView
の代わりに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">
<!-- Some Views Here -->
<Android.support.v4.widget.NestedScrollView
Android:layout_width="0dp"
Android:layout_height="0dp"
Android:fillViewport="true"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@+id/view">
<Android.support.constraint.ConstraintLayout
Android:layout_width="match_parent"
Android:layout_height="wrap_content">
<!-- Some Views That can be Scrolled Here -->
</Android.support.constraint.ConstraintLayout>
</Android.support.v4.widget.NestedScrollView>
</Android.support.constraint.ConstraintLayout>
2つのステップ
スクロールビューのレイアウトの高さをゼロに保つAndroid:layout_height="0dp"
再びスクロール表示用Android:fillViewport="true"
Scrollviewに下部の制約を追加してみて(例:app:layout_constraintBottom_toBottomOf="parent"
)、Android:layout_height = "wrap_content"をAndroid:layout_height="0dp"
に変更します
私の場合、NestedScrollView
の代わりにScrollView
が機能しました。
以下は私の作業レイアウトのスニペットです:スクロールビューでもconstrianlayout内でchildviewの高さがparent(0 dp)に一致しないようにしてくださいAndroid:fillViewport = "true;
何か疑問がある場合は私に聞いてください。
<Android.support.v4.widget.NestedScrollView
Android:id="@+id/scroll_view"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:layout_marginTop="@dimen/_90sdp"
Android:fillViewport="true">
<Android.support.constraint.ConstraintLayout
Android:layout_width="match_parent"
Android:layout_height="0dp"
Android:id="@+id/cvLayout"
Android:animateLayoutChanges="true">
この問題には2つの解決策があります(同じ解決策ですが、2つの方法があります)。
デザインモード in Android Studioを選択し、ScrollViewを選択して属性タブを開き、layout_heightで「match_constraint」を選択します。
テキストモード in Android Studioを使用する場合、これを使用します:
<ScrollView
Android:layout_width="match_parent"
Android:layout_height="0dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toBottomOf="@id/tb_details">
ScrollViewの高さが0dpに設定されていることを確認してください。この方法は両方とも同じ問題を解決しますが、これらは異なる方法です。
ScrollViewはルートビューではありません。ScrollViewをラップするConstraintレイアウトがあります。
ただAndroid:fillViewport="true"
親レイアウト
私の場合、背の高いTextView
(高さはwrap_content
)ScrollView
内(高さは0dp
および上下に制約がある場合)。提案は機能しませんでしたが、TextView
内にFrameLayout
をラップすることで問題を解決しました(高さはwrap_content
)。