RecyclerView高度超出屏幕,如何在ConstraintLayout中限制其最大高度?
问题
我希望设置RecyclerView的最大高度,使其不超过ConstraintLayout的参数限制。尝试了多种方案均无效(颜色仅为便于区分)。当前RecyclerView会超出屏幕范围,导致添加按钮被逐渐挤出屏幕,用户无法访问该按钮。附上当前使用的布局代码:
<?xml version="1.0" encoding="utf-8"?> <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" tools:context=".NotfallSelbsthilfeSkillsHochStressEditActivity"> <!--Actionbar Notfall Selbsthilfe Skills list Hoch-Stress bearbeiten--> <androidx.appcompat.widget.Toolbar android:id="@+id/notfall_selbsthilfe_skills_hochStress_list_bearbeiten_actionbar" android:layout_width="match_parent" android:layout_height="65dp" android:background="@drawable/actionbar_design_main" app:titleMarginStart="0dp" app:titleTextColor="@color/white" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" > <!--Relativelayout of back arrow--> <RelativeLayout android:layout_width="45dp" android:layout_height="40dp" android:layout_gravity="start" android:layout_marginStart="0dp" android:layout_marginEnd="0dp"> <!--ImageButton of back arrow--> <ImageButton android:id="@+id/notfall_selbsthilfe_skills_hochStress_list_bearbeiten_backArrow" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginStart="0dp" android:layout_marginTop="0dp" android:layout_marginEnd="0dp" android:layout_marginBottom="0dp" android:background="@drawable/back_arrow" /> </RelativeLayout> <!--Relative View of actionbar headline--> <RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginStart="0dp"> <!--Textview of actionbar headline Notfall Selbsthilfe Skills list Hoch-Stress bearbeiten--> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:fontFamily="sans-serif-medium" android:text="@string/notfall_selbsthilfe_skills_hochStress_bearbeiten" android:textAllCaps="false" android:textColor="@color/white" android:textSize="21dp" /> </RelativeLayout> </androidx.appcompat.widget.Toolbar> <!--ImageView of background--> <ImageView android:id="@+id/notfall_selbsthilfe_skills_hochStress_list_bearbeiten_background" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginTop="65dp" android:src="@color/red2"/> <!--Constraintlayout for content inside Hoch_Stress bearbeiten--> <!--RecyclerView for added Skills--> <androidx.recyclerview.widget.RecyclerView android:id="@+id/notfall_selbsthilfe_skills_hochStress_list_bearbeiten_skill_recycleView" android:layout_width="match_parent" android:layout_height="wrap_content" android:clickable="true" app:layout_constrainedHeight="true" app:layout_constraintHeight_min="1dp" app:layout_constraintHeight_max="710dp" app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toBottomOf="@+id/notfall_selbsthilfe_skills_hochStress_list_bearbeiten_actionbar" app:layout_constraintBottom_toTopOf="@+id/notfall_selbsthilfe_skills_hochStress_list_bearbeiten_add" /> <!--ImageView for button to add Skills--> <ImageView android:id="@+id/notfall_selbsthilfe_skills_hochStress_list_bearbeiten_add" android:layout_width="50dp" android:layout_height="50dp" android:alpha="1" android:src="@drawable/add_black" app:layout_constraintTop_toBottomOf="@+id/notfall_selbsthilfe_skills_hochStress_list_bearbeiten_skill_recycleView" app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toEndOf="parent" /> </androidx.constraintlayout.widget.ConstraintLayout>
解决方案
你当前的核心问题是RecyclerView和添加按钮的约束逻辑错误,同时固定高度的方式不适配多屏幕场景,以下是具体修正方案:
调整RecyclerView的核心属性
- 将RecyclerView的
android:layout_height从wrap_content改为0dp(即匹配约束),这样它会严格限制在Toolbar和添加按钮之间的区域,不会自行撑开超出范围。 - 移除固定数值的
app:layout_constraintHeight_max="710dp",改用相对约束适配不同屏幕,避免小屏设备上依然出现超出问题。 - 保留
app:layout_constrainedHeight="true"确保约束规则生效。
- 将RecyclerView的
固定添加按钮的位置
给添加按钮添加底部约束,让它固定在屏幕底部区域,同时移除依赖RecyclerView底部的约束,防止被挤走:app:layout_constraintBottom_toBottomOf="parent" android:layout_marginBottom="16dp" <!-- 可根据需求调整边距大小 -->修正后的核心布局代码
<!--RecyclerView for added Skills--> <androidx.recyclerview.widget.RecyclerView android:id="@+id/notfall_selbsthilfe_skills_hochStress_list_bearbeiten_skill_recycleView" android:layout_width="match_parent" android:layout_height="0dp" android:clickable="true" app:layout_constrainedHeight="true" app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toBottomOf="@+id/notfall_selbsthilfe_skills_hochStress_list_bearbeiten_actionbar" app:layout_constraintBottom_toTopOf="@+id/notfall_selbsthilfe_skills_hochStress_list_bearbeiten_add" /> <!--ImageView for button to add Skills--> <ImageView android:id="@+id/notfall_selbsthilfe_skills_hochStress_list_bearbeiten_add" android:layout_width="50dp" android:layout_height="50dp" android:alpha="1" android:src="@drawable/add_black" app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintBottom_toBottomOf="parent" android:layout_marginBottom="16dp" />额外优化建议
可以给RecyclerView添加上下内边距,避免内容紧贴Toolbar和添加按钮,提升视觉体验:android:paddingTop="8dp" android:paddingBottom="8dp"
内容的提问来源于stack exchange,提问作者Copaxy
相关产品推荐
相关产品推荐

