我在垂直方向上并排ScrollView
和Button
( ConstraintLayout
加权链的两个子项,权重1和0分别为{{ 1}}和ScrollView
。顺便说一句,您可以选择将它们视为Button
而不是LinearLayout
的子项,因为加权ConstraintLayout
链的工作方式几乎相同一个ConstraintLayout
)。
这是使用某些项目(子项)列表创建LinearLayout
的典型用例之一,底部有一个大按钮,可根据{{中填充的值搜索数据库1}}孩子们。如下所示:
红色环绕部分是Button应该在的位置(它在那里但不可见)。
现在问题。
我希望按钮始终可见,而不管ScrollView
(,如果这意味着缩小ScollView
的高度,那么因为它可以在所有时间后滚动)但由于ScrollView
的内容占用了足够的空间来隐藏ScrollView
,因此默认情况下它会被隐藏。解决方案(我认为)需要缩小ScrollView
的高度,只需缩小Button
在下面剩余空间中可见的数量。
请注意,我不希望这种安排最终会让ScrollView
覆盖Button
的区域。这种情况下Button
不需要高度收缩,而是ScrollView
在底部漂浮在其上方,隐藏了一些区域。我想强制ScrollView
调整为Button
。此外,权重分别为1和0也无济于事。
编辑:布局代码。 (ScrollView
带有id search_button)
Button
编辑2:正如@marshmallow所提出的,
// include layout =“@ layout / layout_subject_search”
Button
// include layout =“@ layout / layout_qualification_search”
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="8dp"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
>
<ScrollView
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
android:id="@+id/scrollView2"
app:layout_constraintTop_toTopOf="parent"
tools:layout_constraintRight_creator="1"
tools:layout_constraintLeft_creator="1"
app:layout_constraintVertical_weight="1"
app:layout_constraintBottom_toTopOf="@+id/search_button"
app:layout_constraintVertical_chainStyle="spread_inside">
<android.support.constraint.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginEnd="4dp"
android:layout_marginLeft="4dp"
android:layout_marginRight="4dp"
android:layout_marginStart="4dp"
android:layout_marginTop="8dp"
android:background="@android:drawable/dialog_holo_light_frame"
android:paddingEnd="8dp"
android:paddingLeft="8dp"
android:paddingRight="8dp"
android:paddingStart="8dp"
android:paddingTop="8dp">
<LinearLayout
android:layout_height="wrap_content"
android:layout_width="0dp"
app:layout_constraintTop_toTopOf="parent"
android:layout_marginTop="8dp"
android:layout_marginLeft="8dp"
android:layout_marginStart="8dp"
app:layout_constraintLeft_toLeftOf="parent"
android:layout_marginRight="8dp"
android:layout_marginEnd="8dp"
android:orientation="vertical"
app:layout_constraintRight_toRightOf="parent"
android:id="@+id/frameLayout">
<include layout="@layout/layout_subject_search" />
</LinearLayout>
<View
android:layout_width="0dp"
android:layout_height="wrap_content"
android:background="?android:attr/listDivider"
android:layout_marginLeft="8dp"
app:layout_constraintLeft_toLeftOf="parent"
android:layout_marginRight="8dp"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@+id/frameLayout"
android:layout_marginStart="8dp"
android:layout_marginEnd="8dp"
android:layout_marginTop="8dp"
android:id="@+id/view" />
<LinearLayout
android:layout_height="wrap_content"
android:layout_width="0dp"
android:layout_marginTop="8dp"
android:layout_marginLeft="8dp"
android:layout_marginStart="8dp"
app:layout_constraintLeft_toLeftOf="parent"
android:layout_marginRight="8dp"
android:layout_marginEnd="8dp"
android:orientation="vertical"
app:layout_constraintRight_toRightOf="parent"
android:id="@+id/frameLayout1"
app:layout_constraintTop_toBottomOf="@+id/view">
<include layout="@layout/layout_qualification_search" />
</LinearLayout>
<View
android:layout_width="0dp"
android:layout_height="2dp"
android:background="?android:attr/listDivider"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
android:layout_marginTop="8dp"
app:layout_constraintTop_toBottomOf="@+id/frameLayout1"
android:layout_marginLeft="8dp"
android:layout_marginRight="8dp"
android:layout_marginStart="8dp"
android:layout_marginEnd="8dp"
android:id="@+id/view2" />
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/search_by_location_label"
android:textSize="15sp"
android:textStyle="bold"
android:layout_marginLeft="8dp"
app:layout_constraintLeft_toLeftOf="parent"
android:layout_marginTop="8dp"
app:layout_constraintTop_toBottomOf="@+id/view2"
android:layout_marginStart="8dp" />
<Switch
android:id="@+id/location_toggle_switch"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:text=""
android:layout_marginTop="16dp"
app:layout_constraintTop_toBottomOf="@+id/view2"
android:layout_marginRight="16dp"
app:layout_constraintRight_toRightOf="parent"
android:layout_marginEnd="16dp" />
<FrameLayout
android:id="@+id/map_search_fragment"
android:layout_width="0dp"
android:layout_height="240dp"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_below="@+id/textView"
android:layout_marginBottom="8dp"
android:layout_marginEnd="8dp"
android:layout_marginLeft="8dp"
android:layout_marginRight="8dp"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:background="@android:drawable/dialog_holo_light_frame"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@+id/location_toggle_switch"
app:layout_constraintVertical_bias="0.0">
</FrameLayout>
</android.support.constraint.ConstraintLayout>
</ScrollView>
<Button
android:id="@+id/search_button"
android:layout_width="0dp"
android:layout_height="0dp"
android:text="@string/search_tutors_string"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
android:layout_marginBottom="4dp"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintVertical_weight="0"
app:layout_constraintTop_toBottomOf="@+id/scrollView2" />
<ProgressBar
android:id="@+id/search_tutors_progress_bar"
style="?android:attr/progressBarStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
android:visibility="gone"/>
</android.support.constraint.ConstraintLayout>
答案 0 :(得分:0)
将ScrollView
身高改为wrap_content
<ScrollView
android:layout_width="0dp"
android:layout_height="wrap_content"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
android:id="@+id/scrollView2"
...>
</ScrollView>
在ScrollView中将constraintVertical_bias
更改为0.0
app:layout_constraintVertical_bias="0.0"
<强>更新强>
将高度更改为Button
至wrap_content
,它将正确显示。
答案 1 :(得分:0)
首先,感谢@marshmallow建议wrap_content
策略以及反复测试和回复更新的解决方案。
解决方案对他的建议有点扭曲:
layout_height
的{{1}}为Button
。为什么?我们希望声明按钮的高度作为wrap_content
调整其大小的参考,并使用ScrollView
获取按钮的真实高度。wrap_content
根据按钮调整其大小。为此,我们使用ScrollView
作为layout_height
转换为“使用可用约束来调整您的大小,而不是断言您自己的任何固定大小”。出于同样的原因,0dp
的高度不是0dp。Button
,0为ScrollView
(因为宽度不是0dp /匹配约束,因此对Button无效);所以只需指向Button
以占用ScrollView
以外的空间有了这个,最终的解决方案就变成:(针对纵向和横向模式测试的解决方案)
Button