app:layout_scrollFlags不同属性的值对应不同的滑动方式

本文主要讲解了在ToolBar上添加app:layout_scrollFlags属性,不同值产生的不同效果。如scroll使ToolBar随手指滑动进出屏幕;scroll|enterAlways让向下滑动时ToolBar先进入屏幕;enterAlwaysCollapsed和exitUntilCollapsed涉及最小高度;snap与scroll配合使AppBarLayout随滑动View自动进出屏幕。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ToolBar上添加了 app:layout_scrollFlags这个属性,给这个属性添加不同的值,效果是完全不同的,下面来讲解下各个值的效果:

  1. 先说当app:layout_scrollFlags=“scroll”,此时TollBar会随着手指的滑动滚出屏幕,或者滚进屏幕,此时TollBar和下面的滑动控件(比如NestedScrollView,RecycleView)是融为一体的,
  2. 当app:layout_scrollFlags=“scroll|enterAlways”,此时向上滚动时和单纯的scroll属性是没有任何区别的,主要是向下滑动时,ToolBar总是先进入屏幕,(正应验了enterAlways这个属性,总是进入),当ToolBar完全进入屏幕之后,再接着才是NestedScrollView才进入
  3. enterAlwaysCollapsed 这里涉及到Child View(这里的子view的指的是ToolBar)的高度和最小高度。enterAlwaysCollapsed一般是配合enterAlways一起使用的,同时一定要给Toolbar设置最小高度(minheight),不过Toolbar默认最小高度就是ActionBar的高度…
  4. exitUntilCollapsed:这个跟上面的enterAlwaysCollapsed相反;它也涉及到minHeight,当发生向上滚动事件时,AppLayout向上滚动,直到我们设置的minHeight,然后我们的滑动View才开始滚动。就算我们滑动的view完全上滑完毕,我们的AppBarLayout也会一直保留我们设置的民Height显示在屏幕的上方
  5. snap 与scroll一起使用时,我们只需要滑动一小段距离,AppBarLayout就会随着我们滑动的View向上滑出屏幕。AppBarLayout会跟随着我们滑动View的滑动,当AppBarLayout滑出屏幕的部分大于显示区域,我们松开手指,AppBarLayout就会自动滑出屏幕;当AppBarLayout滑出屏幕的部分小于显示区域,我们松开手指,AppBarLayout就会自动滑进屏幕。
### 实现搜索栏随页面滑动自动隐藏 为了实现在Android应用中搜索栏随页面滑动而自动隐藏的功能,通常会采用`CoordinatorLayout`配合`AppBarLayout`以及`CollapsingToolbarLayout`组件来完成这一效果。这些布局能够监听滚动事件并相应调整子视图的位置。 #### 使用 CoordinatorLayoutAppBarLayout 布局 定义一个包含 `CoordinatorLayout` 的 XML 文件作为根容器,在其中嵌套 `AppBarLayout` 来容纳顶部工具条(即搜索栏),再放置一个可滚动的内容区域如 `NestedScrollView` 或者 `RecyclerView`: ```xml <androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/coordinator_layout" android:layout_width="match_parent" android:layout_height="match_parent"> <com.google.android.material.appbar.AppBarLayout android:id="@+id/app_bar_layout" android:layout_width="match_parent" android:layout_height="wrap_content"> <!-- 这里是你的搜索栏 --> <include layout="@layout/search_toolbar"/> </com.google.android.material.appbar.AppBarLayout> <!-- 可滚动内容区 --> <androidx.core.widget.NestedScrollView android:id="@+id/scroll_view" android:layout_width="match_parent" android:layout_height="match_parent" app:layout_behavior="@string/appbar_scrolling_view_behavior"> <!-- 内容部分 --> </androidx.core.widget.NestedScrollView> </androidx.coordinatorlayout.widget.CoordinatorLayout> ``` 此配置使得当用户向上或向下滚动时,`AppBarLayout`内的元素可以根据设置的行为模式被折叠或展开[^1]。 #### 设置 Behavior 行为 为了让搜索栏响应于用户的触控操作,可以在`search_toolbar.xml`文件中的 Toolbar 组件添加特定属性以控制其行为: ```xml <androidx.appcompat.widget.Toolbar ... app:layout_scrollFlags="scroll|enterAlwaysCollapsed"/> ``` 这里的关键在于`app:layout_scrollFlags`属性,它决定了该View在滚动过程中的表现形式。“scroll”表示允许这个 View 随着滚动动作一起移动;“enterAlwaysCollapsed”则意味着即使有其他 Views 占用了空间,当前 View 也会尽可能早地重新进入可见状态,并且是以压缩的形式呈现直到完全显示为止[^2]。 #### Java/Kotlin 中处理逻辑 如果还需要更复杂的交互逻辑,则可以通过编程的方式获取对应Layout 并注册 OnOffsetChangedListener 监听器来捕捉偏移变化情况从而执行自定义的动作: ```java AppBarLayout appBarLayout = findViewById(R.id.app_bar_layout); appBarLayout.addOnOffsetChangedListener(new AppBarLayout.OnOffsetChangedListener() { @Override public void onOffsetChanged(AppBarLayout appBarLayout, int verticalOffset) { // 当垂直方向上的位移发生变化时触发 if (Math.abs(verticalOffset)-appBarLayout.getTotalScrollRange()==0){ // 完全不可见 }else{ // 正在消失或者已经半透明 } } }); ``` 上述方法提供了基本框架用于创建具有滑动手势支持的搜索栏界面设计。当然实际项目可能还会涉及到更多细节优化工作,比如动画过渡效果、性能调优等方面考虑[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值