在我的案例中,我的ScrollView底部显示了一个大的空白区域

时间:2017-12-20 18:09:42

标签: android android-layout android-scrollview android-constraintlayout

我的ScrollViewConstraintLayout ConstraintLayoutRecyclerView内有<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_height="match_parent" android:layout_width="match_parent" android:orientation="vertical" android:fillViewport="true" android:overScrollMode="never"> <android.support.constraint.ConstraintLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> <android.support.v7.widget.RecyclerView android:id="@+id/my_list" android:layout_width="0dp" android:layout_height="match_parent" android:layout_marginBottom="8dp" android:layout_marginTop="15dp" android:clipToPadding="false" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toBottomOf="parent" app:layout_constraintVertical_bias="0.0" /> </android.support.constraint.ConstraintLayout> </ScrollView>

结构是这样的:

ScrollView

我的代码将对象列表填充到RecyclerView,没问题。唯一的问题是new AlertDialog.Builder(MainActivity.this) .setTitle(getResources().getString(R.string.emergency_diag_title)) //AlertDialog title .setMessage(getResources().getString(R.string.emrgency_diag_desc)) //AlertDialog description .setCancelable(true) //call button .setPositiveButton(getResources().getString(R.string.emergency_diag_call), new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Log.e("RuiterRoute", "Emergency Call triggered by user"); } }) //cancel button .setNegativeButton(getResources().getString(R.string.emergency_cancel), new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Log.e("RuiterRoute", "Emergency Call canceld by user"); } }).show(); 底部有一个很大的空白区域,我不明白为什么?有人可以指出我正确的方向吗?提前谢谢!

(这个结果的一个问题是,例如,如果我的列表中只有一个对象,则不需要滚动视图,但它仍然可以滚动,底部有一个大的空白区域。)

3 个答案:

答案 0 :(得分:0)

丢失了ScrollViewRecyclerView可以自行滚动。

ConstraintLayout

也不支持match_parent

您需要将所有边限制为父节点并且宽度和高度为0dp(match_constraint)

<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:orientation="vertical">

    <android.support.v7.widget.RecyclerView
        android:id="@+id/my_list"
        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="parent"
        android:layout_marginBottom="8dp"
        android:layout_marginTop="15dp"
        android:clipToPadding="false"
        />
 </android.support.constraint.ConstraintLayout>

注释

ConstraintLayout的宽度和高度为match_parent

RecyclerView的宽度和高度为0dp,这意味着要匹配约束,而RecyclerView对父母的所有边都是约束。

当内容更适合屏幕时,您的回收者视图将滚动

答案 1 :(得分:0)

wrap_content使用match_content代替RecyclerView后,我的问题就解决了。

答案 2 :(得分:0)

这是一个ConstraintLayout错误(在ScrollView中包装ConstraintLayout时)并在新的beta版本中得到修复。我有同样的问题,并更新到 1.1.0-beta4 ,这解决了它。点击此处查看最新版本:

https://dl.google.com/dl/android/maven2/com/android/support/constraint/group-index.xml