Android CoordinatorLayout+AppBarLayout+CollapsingToolbarLayout实现折叠置顶效果

文章目录

  • [Android CoordinatorLayout+AppBarLayout+CollapsingToolbarLayout实现折叠置顶效果](#Android CoordinatorLayout+AppBarLayout+CollapsingToolbarLayout实现折叠置顶效果)

Android CoordinatorLayout+AppBarLayout+CollapsingToolbarLayout实现折叠置顶效果

概述

  • CoordinatorLayout:根容器,是一个FrameLayout,负责协调子视图之间的交互。
  • AppBarLayout:CoordinatorLayout的子视图,是一个LinearLayout,负责实现折叠和展开效果。
  • CollapsingToolbarLayout:AppBarLayout的子视图,是一个FrameLayout,负责丰富的折叠效果。

布局结构:

复制代码
- CoordinatorLayout
	- AppBarLayout
		- CollapsingToolbarLayout
			- 折叠区域			
		- 需要置顶区域
	- NestedScrollView

常用属性

  • layout_collapseMode:折叠模式
    • none、pin、parallax
  • layout_collapseParallaxMultiplier:视差滚动效果的速度系数。
    • 0.0 ~ 1.0
  • layout_gravity:元素在CollapsingToolbarLayout中的位置。
    • top, bottom, left, right, center
  • contentScrim:折叠时显示的样式或图片。
  • expandedTitleMargin:展开状态下标题的边距。
  • layout_behavior:指定滚动行为。
    • @string/appbar_scrolling_view_behavior

方式一

xml 复制代码
<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout 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:fitsSystemWindows="true"
    tools:context=".collapsing.Collapsing1Activity">

    <com.google.android.material.appbar.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="250dp"
        android:fitsSystemWindows="true">

        <com.google.android.material.appbar.CollapsingToolbarLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:fitsSystemWindows="true"
            android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
            app:contentScrim="@color/colorPrimary"
            app:layout_scrollFlags="scroll|exitUntilCollapsed">

            <ImageView
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:fitsSystemWindows="true"
                android:scaleType="centerCrop"
                android:src="@drawable/img_apple"
                app:layout_collapseMode="parallax"
                app:layout_collapseParallaxMultiplier="0.5" />

            <androidx.appcompat.widget.Toolbar
                android:id="@+id/toolbar"
                android:layout_width="match_parent"
                android:layout_height="?attr/actionBarSize"
                app:layout_collapseMode="pin"
                app:title="标题" />
        </com.google.android.material.appbar.CollapsingToolbarLayout>
    </com.google.android.material.appbar.AppBarLayout>

    <androidx.core.widget.NestedScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior">

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

            <TextView
                android:layout_width="match_parent"
                android:layout_height="800dp"
                android:background="#999"
                android:gravity="center"
                android:text="内容区" />
        </LinearLayout>
    </androidx.core.widget.NestedScrollView>
</androidx.coordinatorlayout.widget.CoordinatorLayout>

方式二

xml 复制代码
<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout 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:fitsSystemWindows="true"
    tools:context=".collapsing.Collapsing2Activity">

    <com.google.android.material.appbar.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:fitsSystemWindows="true">

        <com.google.android.material.appbar.CollapsingToolbarLayout
            android:layout_width="match_parent"
            android:layout_height="250dp"
            android:fitsSystemWindows="true"
            android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
            app:layout_scrollFlags="scroll|exitUntilCollapsed">

            <ImageView
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:fitsSystemWindows="true"
                android:scaleType="centerCrop"
                android:src="@drawable/img_apple"
                app:layout_collapseMode="parallax"
                app:layout_collapseParallaxMultiplier="0.5" />

        </com.google.android.material.appbar.CollapsingToolbarLayout>

        <com.google.android.material.tabs.TabLayout
            android:id="@+id/tab_layout"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:tabIndicatorColor="@color/black"
            app:tabIndicatorFullWidth="false"
            app:tabMode="fixed"
            app:tabPaddingEnd="0dp"
            app:tabPaddingStart="0dp"
            app:tabSelectedTextColor="@color/black" />
    </com.google.android.material.appbar.AppBarLayout>

    <androidx.core.widget.NestedScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior">

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

            <TextView
                android:layout_width="match_parent"
                android:layout_height="1200dp"
                android:background="#999"
                android:gravity="center"
                android:text="内容区" />
        </LinearLayout>
    </androidx.core.widget.NestedScrollView>
</androidx.coordinatorlayout.widget.CoordinatorLayout>
相关推荐
大貔貅喝啤酒17 小时前
基于Windows下载安装Android Studio 3.3.2版本教程(2026详细图文版)
android·java·windows·android studio
程序员码歌17 小时前
OpenSpec 到 Superpowers:AI 编码从说清到做对
android·前端·人工智能
2501_9151063217 小时前
深入解析无源码iOS加固原理与方案,保护应用安全
android·安全·ios·小程序·uni-app·cocoa·iphone
黄林晴20 小时前
重磅官宣:Android UI 开发正式进入 Compose-first 时代
android·google io
Kapaseker21 小时前
搞懂变换!精通 Compose 绘制(二)
android·kotlin
美狐美颜SDK开放平台21 小时前
美颜SDK开发详解:如何优化美颜SDK在低端安卓机上的性能?
android·ios·音视频·直播美颜sdk·视频美颜sdk
Gary Studio21 小时前
深入MTK Android BSP:如何确定编译目标与查找项目设备树
android
casual_clover21 小时前
【Android】实现状态栏背景透明,系统时间/图标直接显示在页面背景上
android·透明状态栏
blackorbird21 小时前
Android Pixel 10 零点击漏洞利用链
android
_kerneler21 小时前
[qemu+kvm] vfio-platform irq 注入过程
android