You need to enable JavaScript to run this app. Android如何让HorizontalScrollView固定在Toolbar下方无需回顶切换Fragment
优惠活动
大模型
产品
解决方案
定价
更多

Android如何让HorizontalScrollView固定在Toolbar下方无需回顶切换Fragment

解决方案

布局调整逻辑

你当前的HorizontalScrollView被嵌套在NestedScrollView内部,所以会跟随页面整体滚动,要实现固定吸附在Toolbar下方,只需要调整布局层级,将HorizontalScrollView移出NestedScrollView,作为ConstraintLayout的直接子View固定在Toolbar下方即可。

修改后完整布局代码

<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"
    android:background="@color/smoky_white"
    tools:context=".o_kaznau">

    <androidx.appcompat.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:background="@color/purple_200"
        android:elevation="4dp"
        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
        app:title="О КазНАИУ" />

    <!-- 移出NestedScrollView,固定在Toolbar下方 -->
    <HorizontalScrollView
        android:id="@+id/horizontalScrollView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:layout_constraintTop_toBottomOf="@id/toolbar"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toEndOf="parent">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="horizontal">

            <Button
                android:id="@+id/btnAbout"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:background="@drawable/about_btn"
                android:onClick="aboutAbout"
                android:textSize="15sp"
                android:textAllCaps="false"
                android:text="Об университете" />

            <Button
                android:id="@+id/btnRyk"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:background="@drawable/about_btn"
                android:onClick="aboutRyc"
                android:textSize="15sp"
                android:textAllCaps="false"
                android:text="Руководство" />

            <Button
                android:id="@+id/btnPolitika"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:background="@drawable/about_btn"
                android:onClick="aboutPolitika"
                android:textSize="15sp"
                android:textAllCaps="false"
                android:text="Политика" />

            <Button
                android:id="@+id/button5"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:background="@drawable/about_btn"
                android:onClick="aboutYstav"
                android:textSize="15sp"
                android:textAllCaps="false"
                android:text="Устав" />

        </LinearLayout>
    </HorizontalScrollView>

    <androidx.core.widget.NestedScrollView
        android:layout_width="match_parent"
        android:layout_height="0dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@id/horizontalScrollView">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical">

            <ImageView
                android:id="@+id/imageView11"
                android:layout_width="match_parent"
                android:layout_height="230dp"
                android:scaleType="fitXY"
                android:src="@drawable/im_maincorpus1"/>

            <FrameLayout
                android:id="@+id/aboutFL"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"/>
        </LinearLayout>
    </androidx.core.widget.NestedScrollView>
</androidx.constraintlayout.widget.ConstraintLayout>

额外适配注意事项

因为你第2、4个Fragment里有承载大量数据的RecyclerView,需要做滑动兼容处理:

  • 在对应Fragment的RecyclerView布局中添加属性 android:nestedScrollingEnabled="false",避免和外层NestedScrollView产生滑动冲突,保证列表滚动流畅、数据正常渲染。
  • 如果需要RecyclerView独立滑动,可以把FrameLayout移出NestedScrollView,单独约束在HorizontalScrollView底部,同时去掉外层NestedScrollView,由Fragment内部的RecyclerView处理滑动逻辑,性能更好。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 14:06:09