我的表格大约有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>
答案 0 :(得分:39)
此布局适用于我的应用。 诀窍是在ScrollView中设置这两个属性: 机器人:layout_height =&#34; 0dp&#34; 应用程式:layout_constraintBottom_toBottomOf =&#34;父&#34;
我的应用程序的简化布局:
<?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>
答案 1 :(得分:7)
两步
保持滚动视图的布局高度为零
android:layout_height="0dp"
再次滚动视图
android:fillViewport="true"
答案 2 :(得分:6)
尝试向scrollview添加底部约束(例如:app:layout_constraintBottom_toBottomOf="parent"
)
并更改android:layout_height =&#34; wrap_content&#34;到android:layout_height="0dp"
答案 3 :(得分:5)
在我的情况下,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>
答案 4 :(得分:3)
在我看来,NestedScrollView
代替了ScrollView
。
以下是我的工作布局摘要: 请确保滚动视图 android:fillViewport =“ true ;
都没有使子视图高度与constrianlayout中的parent(0 dp)相匹配。如有疑问,请问我。
<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">
答案 5 :(得分:2)
你有两个解决这个问题的方法(相同的解决方案,但有两种方法):
如果您在Android Studio中设置设计模式,请选择ScrollView并打开属性标签,然后在layout_height中选择“ match_constraint ”。
如果您在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不是根视图,我有一个Constraint布局包装ScrollView就像你一样。
答案 6 :(得分:2)
只需将android:fillViewport="true"
放在父版式中
答案 7 :(得分:0)
在我的情况下,我在TextView
(高度设置为wrap_content
)内有一个高ScrollView
(高度设置为0dp
),并且在顶部和底部受到约束)。没有任何建议有效,但是我通过将TextView
包装在FrameLayout
(高度设置为wrap_content
)中解决了这个问题。
答案 8 :(得分:0)
对我来说,我需要在ScrollView中添加一个LinearLayout以便对其进行约束
<androidx.constraintlayout.widget.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"
app:layout_constraintTop_toTopOf="parent"
tools:layout_editor_absoluteX="1dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<View....</View>
</LinearLayout>
</ScrollView>
</androidx.constraintlayout.widget.ConstraintLayout>
答案 9 :(得分:0)
我已解决此问题。在ScrollView内部,您不能使用约束布局。 要在滚动内使用约束,必须使用相对布局是约束Layout的父级。
您的顺序应为:
ScrollView --->相对布局--->约束布局
答案 10 :(得分:0)
如果您是在搜索“ 软键盘隐藏视图元素”之后来到这里的!
然后,您只需要再次添加一个scrollView和相同的布局元素。
之前
<androidx.constraintlayout.widget.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">
<ImageView
android:id="@+id/imageView3"
android:layout_width="246dp"
android:layout_height="168dp"
android:layout_marginTop="20dp"
android:src="@drawable/img"/>
<Button
android:id="@+id/btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</androidx.constraintlayout.widget.ConstraintLayout>
之后
<androidx.constraintlayout.widget.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="0dp"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
android:fillViewport="true">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="@+id/imageView3"
android:layout_width="246dp"
android:layout_height="168dp"
android:layout_marginTop="20dp"
android:src="@drawable/img"/>
<Button
android:id="@+id/btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</androidx.constraintlayout.widget.ConstraintLayout>
</ScrollView>
</androidx.constraintlayout.widget.ConstraintLayout>
答案 11 :(得分:0)
如果 ConstraintLayout 位于 SV/NestedSV 内部,则永远不要保持其子节点的 0dp 高度
wrap_content
之所以有效,是因为在这种情况下 ScrollView 知道其孩子的身高。
答案 12 :(得分:0)
对于水平滚动视图的情况(父为ConstraintLayout,直接子为LinearLayout),我发现设置四个约束,layout_width=0dp,fillViewport=true是不够的。它仍然没有滚动。
在我的情况下有效的是设置四个约束并将元素从 ScrollView 更改为 HorizontalScrollView。在这种情况下,layout_width 可以设置为“wrap_content”并且可以省略 fillViewport。 此外,我在 HorizontalScrollView 的直接子元素的末尾添加了一个填充,以使滚动体验和外观更好。
答案 13 :(得分:0)
我遇到了另一个问题,我有 nestedscrollview
有 constrainlayout
有 linearlayout
。此 linearlayout
以编程方式添加子项。所以滚动不起作用。由 replacing
CL 与垂直方向的 LL 求解
<androidx.core.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="0dp"
app:layout_constraintTop_toBottomOf="@+id/separatr"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
android:fillViewport="true"
android:fitsSystemWindows="true"
>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
android:orientation="vertical"
tools:background="@color/yellow_highlight"
android:paddingBottom="@dimen/box96">
<TextView
android:id="@+id/qansTv"
style="@style/BodyText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/box200"
android:layout_marginTop="@dimen/box32"
android:layout_marginEnd="@dimen/box200"
android:text="Lorem ipsum dofdfd fsd fdfsd sdf sdfsd fsdfsd fd sdfd fsdfsdf sdfsd df sdfd fsdfsd fsdf sdfsd dflors fdfdf."
android:textColor="@color/white"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<LinearLayout
android:id="@+id/ansImageContainerLL"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:background="@color/red"
android:layout_marginEnd="@dimen/box64"
android:orientation="vertical"
android:layout_marginStart="@dimen/box64"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/qansTv" />
</LinearLayout>
</androidx.core.widget.NestedScrollView>