You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ConstraintLayout嵌套ScrollView无法滚动及设置属性后消失的问题

ConstraintLayout下ScrollView无法滚动的问题解决

问题分析

当前布局存在两个核心问题:

  • ScrollView使用固定高度600dp,无法适配不同屏幕尺寸,且内部嵌套的ConstraintLayout设置为match_parent,结合android:fillViewport="true",会让内部布局高度和ScrollView完全一致,当内容总高度未超过ScrollView高度时,自然无法触发滚动。
  • 尝试将ScrollView高度设为0dp并添加app:layout_constraintBottom_toBottomOf="parent"时布局消失,本质是内部ConstraintLayout的高度设置错误,导致ScrollView没有可显示的内容高度。

解决方案

1. 修正ScrollView的布局约束

将ScrollView的高度改为0dp,同时添加底部约束到父布局,确保它占据标题栏下方到屏幕底部的所有空间:

<ScrollView
    android:layout_width="0dp"
    android:layout_height="0dp"
    android:background="@color/light_white"
    app:layout_constraintRight_toLeftOf="@id/guideline_vertical_right_outside"
    app:layout_constraintLeft_toRightOf="@id/guideline_vertical_left_outside"
    app:layout_constraintTop_toBottomOf="@id/dialog_title"
    app:layout_constraintBottom_toBottomOf="parent"
    android:fillViewport="true">
    <!-- 内部布局 -->
</ScrollView>

2. 修改内部ConstraintLayout的高度

将ScrollView内部的ConstraintLayout高度从match_parent改为wrap_content,这样内部布局的高度会根据所有子View的总高度自动计算,当总高度超过ScrollView的可视高度时,就会触发滚动:

<androidx.constraintlayout.widget.ConstraintLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:padding="4dp">
    <!-- 内部子View -->
</androidx.constraintlayout.widget.ConstraintLayout>

3. 完善内部子View的垂直约束

确保所有垂直方向的子View都形成完整的约束链,比如最后一个static_data_bg的top已约束到static_data的bottom,这样整个内部布局的高度会自动延伸,无需额外设置底部约束。

完整修改后的代码

父布局部分

<androidx.constraintlayout.widget.ConstraintLayout 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="match_parent">

    <androidx.constraintlayout.widget.Guideline
        android:id="@+id/guideline_top_in_root_view_layer"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:orientation="horizontal"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintGuide_percent=".10" />

    <TextView
        android:id="@+id/dialog_title"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:text="@string/settings_dislpay"
        android:background="@drawable/shape_sheet_dialog_bg"
        android:textSize="22sp"
        android:textColor="@color/black"
        android:gravity="center"
        app:layout_constraintRight_toLeftOf="@id/guideline_vertical_right_outside"
        app:layout_constraintLeft_toRightOf="@id/guideline_vertical_left_outside"
        app:layout_constraintTop_toBottomOf="@id/guideline_top_in_root_view_layer"
        app:layout_constraintDimensionRatio="11:1"/>

    <androidx.constraintlayout.widget.Guideline
        android:id="@+id/guideline_vertical_left_outside"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:orientation="vertical"
        app:layout_constraintGuide_percent="0.01"/>
    <androidx.constraintlayout.widget.Guideline
        android:id="@+id/guideline_vertical_right_outside"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:orientation="vertical"
        app:layout_constraintGuide_percent="0.56"/>

    <ScrollView
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:background="@color/light_white"
        app:layout_constraintRight_toLeftOf="@id/guideline_vertical_right_outside"
        app:layout_constraintLeft_toRightOf="@id/guideline_vertical_left_outside"
        app:layout_constraintTop_toBottomOf="@id/dialog_title"
        app:layout_constraintBottom_toBottomOf="parent"
        android:fillViewport="true">
        <!-- 内部ConstraintLayout -->
    </ScrollView>
</androidx.constraintlayout.widget.ConstraintLayout>

ScrollView内部布局部分

<androidx.constraintlayout.widget.ConstraintLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:padding="4dp">

    <androidx.constraintlayout.widget.Guideline
        android:id="@+id/guideline_vertical_left_item_bg"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:orientation="vertical"
        app:layout_constraintGuide_percent="0.025"/>
    <androidx.constraintlayout.widget.Guideline
        android:id="@+id/guideline_vertical_right_item_bg"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:orientation="vertical"
        app:layout_constraintGuide_percent="0.975"/>


    <androidx.constraintlayout.widget.Guideline
        android:id="@+id/guideline_day_night_mode_left"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:orientation="vertical"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintGuide_percent="0.05"/>
    <androidx.constraintlayout.widget.Guideline
        android:id="@+id/guideline_day_night_mode_right"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:orientation="vertical"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintGuide_percent="0.95"/>

    <View
        android:id="@+id/day_night_mode_bg"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:background="@drawable/display_setting_item_bg"
        app:layout_constraintRight_toLeftOf="@id/guideline_vertical_right_item_bg"
        app:layout_constraintLeft_toRightOf="@id/guideline_vertical_left_item_bg"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintDimensionRatio="4.5:1"/>

    <TextView
        android:id="@+id/display_mode_auto"
        android:drawableTop="@drawable/ic_launcher"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:text="Auto"
        android:textSize="18sp"
        android:textColor="@color/black"
        android:gravity="center"
        app:layout_constraintWidth_percent="0.3"
        app:layout_constraintLeft_toRightOf="@id/guideline_day_night_mode_left"
        app:layout_constraintRight_toLeftOf="@id/display_mode_day"
        app:layout_constraintTop_toTopOf="@id/day_night_mode_bg"
        app:layout_constraintBottom_toBottomOf="@id/day_night_mode_bg"/>

    <TextView
        android:id="@+id/display_mode_day"
        android:drawableTop="@drawable/ic_launcher"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:text="Day"
        android:textSize="20sp"
        android:textColor="@color/black"
        android:gravity="center"
        app:layout_constraintWidth_percent="0.3"
        app:layout_constraintLeft_toRightOf="@id/display_mode_auto"
        app:layout_constraintTop_toTopOf="@id/day_night_mode_bg"
        app:layout_constraintBottom_toBottomOf="@id/day_night_mode_bg"/>

    <TextView
        android:id="@+id/display_mode_night"
        android:drawableTop="@drawable/ic_launcher"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:text="Night"
        android:textSize="20sp"
        android:textColor="@color/black"
        android:gravity="center"
        app:layout_constraintWidth_percent="0.3"
        app:layout_constraintLeft_toRightOf="@id/display_mode_day"
        app:layout_constraintRight_toLeftOf="@id/guideline_day_night_mode_right"
        app:layout_constraintTop_toTopOf="@id/day_night_mode_bg"
        app:layout_constraintBottom_toBottomOf="@id/day_night_mode_bg"/>


    <TextView
        android:id="@+id/instant_message"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:text="instant message"
        android:textSize="18sp"
        android:textColor="@color/grey"
        android:gravity="center_vertical"
        app:layout_constraintHeight_percent="0.09"
        app:layout_constraintRight_toLeftOf="@id/guideline_vertical_right_item_bg"
        app:layout_constraintLeft_toRightOf="@id/guideline_vertical_left_item_bg"
        app:layout_constraintTop_toBottomOf="@id/day_night_mode_bg"/>

    <View
        android:id="@+id/instant_message_bg"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:background="@drawable/display_setting_item_bg"
        app:layout_constraintRight_toLeftOf="@id/guideline_vertical_right_item_bg"
        app:layout_constraintLeft_toRightOf="@id/guideline_vertical_left_item_bg"
        app:layout_constraintTop_toBottomOf="@id/instant_message"
        app:layout_constraintDimensionRatio="4.5:1"/>

    <TextView
        android:id="@+id/display_tv"
        android:drawableTop="@drawable/ic_launcher"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:text="tv"
        android:textSize="20sp"
        android:textColor="@color/black"
        android:gravity="center"
        app:layout_constraintWidth_percent="0.3"
        app:layout_constraintLeft_toRightOf="@id/guideline_day_night_mode_left"
        app:layout_constraintTop_toTopOf="@id/instant_message_bg"
        app:layout_constraintBottom_toBottomOf="@id/instant_message_bg"/>

    <TextView
        android:id="@+id/display_time"
        android:drawableTop="@drawable/ic_launcher"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:text="time"
        android:textSize="20sp"
        android:textColor="@color/black"
        android:gravity="center"
        app:layout_constraintWidth_percent="0.3"
        app:layout_constraintLeft_toRightOf="@id/display_tv"
        app:layout_constraintTop_toTopOf="@id/instant_message_bg"
        app:layout_constraintBottom_toBottomOf="@id/instant_message_bg"/>

    <TextView
        android:id="@+id/static_data"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:text="static data"
        android:textSize="18sp"
        android:textColor="@color/grey"
        android:gravity="center_vertical"
        app:layout_constraintHeight_percent="0.09"
        app:layout_constraintRight_toLeftOf="@id/guideline_vertical_right_item_bg"
        app:layout_constraintLeft_toRightOf="@id/guideline_vertical_left_item_bg"
        app:layout_constraintTop_toBottomOf="@id/instant_message_bg"/>

    <View
        android:id="@+id/static_data_bg"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:background="@drawable/display_setting_item_bg"
        app:layout_constraintRight_toLeftOf="@id/guideline_vertical_right_item_bg"
        app:layout_constraintLeft_toRightOf="@id/guideline_vertical_left_item_bg"
        app:layout_constraintTop_toBottomOf="@id/static_data"
        app:layout_constraintDimensionRatio="4.5:1"/>

</androidx.constraintlayout.widget.ConstraintLayout>

内容的提问来源于stack exchange,提问作者Joanhahaha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 11:50:54