应该在哪里设置'app:layout_behavior'?

Evi*_*n1_ 26 android vertical-scrolling android-layout material-design android-coordinatorlayout

它应该在AppBarLayout兄弟的父母或其兄弟姐妹的第一个Scrollable View中设置吗?


使用Material Design for Android,有些视图可以让我们根据周围环境处理布局的行为,其中一个是CoordinatorLayout,正如CodePath指南所提到的:

CoordinatorLayout扩展了完成许多Google Material Design滚动效果的功能.目前,此框架中提供了多种方法,使其无需编写您自己的自定义动画代码即可工作.

我现在感兴趣的是:

  • 扩展或收缩工具栏或标题空间以为主要内容腾出空间.

因此,我们将AppBarLayout与带有set 的工具栏app:layout_scrollFlags和另一个与AppBarLayout一起使用的ViewGroup兄弟一起使用app:layout_behavior.

我的问题是:我们应该把它放在什么样的ViewGroup(或者View) app:layout_behavior


到目前为止,我已经尝试过(而且他们都已经工作了,他们都是AppBarLayout的兄弟姐妹):

  • 滚动视图

  • 可滚动视图中的第一个ViewGroup

  • ViewGroup内的ScrollView

而这一个没有用:

  • 没有Scrollable View子集的ViewGroup.

在线有多个例子,但没有一个真正说明你应该把它放在哪里,比如:

http://www.ingloriousmind.com/blog/quick-look-on-the-coordinatorlayout/ https://guides.codepath.com/android/Handling-Scrolls-with-CoordinatorLayout https://developer.android.com /training/basics/firstapp/building-ui.html https://www.bignerdranch.com/blog/becoming-material-with-android-design-support-library/

ʍѳђ*_*ઽ૯ท 22

点击此链接: https ://developer.android.com/reference/android/support/design/widget/AppBarLayout.html

AppBarLayout还需要一个单独的滚动兄弟,以便知道何时滚动.绑定是通过AppBarLayout.ScrollingViewBehavior类完成的 ,这意味着您应该将滚动视图的行为设置为实例 AppBarLayout.ScrollingViewBehavior.包含完整类名的字符串资源可用.

他们提到这件事,应该是View将下显示AppBarLayout是这样的:

<android.support.design.widget.CoordinatorLayout
         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">

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

         <!-- Your scrolling content -->

     </android.support.v4.widget.NestedScrollView>

     <android.support.design.widget.AppBarLayout
             android:layout_height="wrap_content"
             android:layout_width="match_parent">

         <android.support.v7.widget.Toolbar
                 ...
                 app:layout_scrollFlags="scroll|enterAlways"/>

         <android.support.design.widget.TabLayout
                 ...
                 app:layout_scrollFlags="scroll|enterAlways"/>

     </android.support.design.widget.AppBarLayout>

 </android.support.design.widget.CoordinatorLayout>
Run Code Online (Sandbox Code Playgroud)

我的问题是:我们应该用什么确切的ViewGroup(或者可能View)app:layout_behavior呢?

在这个链接:http://guides.codepath.com/android/Handling-Scrolls-with-CoordinatorLayout

接下来,我们需要定义将要滚​​动的ViewView 之间关联.添加到 任何其他能够嵌套滚动的视图,例如 .支持库包含一个映射到的特殊字符串资源, 用于通知 此特定视图上何时发生滚动事件.必须在触发事件的视图上建立行为.AppBarLayoutapp:layout_behaviorRecyclerViewNestedScrollView@string/appbar_scrolling_view_behavior AppBarLayout.ScrollingViewBehaviorAppBarLayout

  • 我想“能够嵌套滚动的视图”很重要,如果您在 recyclerView 上禁用了nestedScrolling,则它不起作用 (2认同)

Ran*_*jit 16

请确保您添加的appbar_scrolling_view_behavior在你的领域String.xml

<!-- The class name to the ScrollingChildBehavior required for AppBarLayout -->
<string name="appbar_scrolling_view_behavior" translatable="false">android.support.design.widget.AppBarLayout$ScrollingViewBehavior</string>
Run Code Online (Sandbox Code Playgroud)

众所周知,我们可以像下面这样使用它

<android.support.v7.widget.RecyclerView
        android:id="@+id/rvSomeList"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior" />
Run Code Online (Sandbox Code Playgroud)

它只是为了信息而不是OP答案.

  • 设计支持库已经定义了该字符串资源.在您自己的资源中重新定义它没有任何好处. (6认同)

rmi*_*lle 8

AppBarLayout 还需要一个单独的滚动同级,以便知道何时滚动。

Android 上的这个描述非常不完整,导致我浪费了几个小时的时间。

滚动同级是用词不当,并且不必是任何类型的滚动视图。

例如,在 my 的下面AppBarLayout,我使用 aViewPager2来渲染 aFragment来渲染 a Scrollview,所以我需要app:layout_behavior="@string/appbar_scrolling_view_behavior"直接ViewPager2在主布局中设置,而不是Scrollview在片段布局中深层嵌套。

我也没有必要AppBarLayout在屏幕上滚动或滚动它的任何子项,因此我错误地认为我可以不设置任何app:layout_behavior地方。

错误的。

这揭示了一个更阴险的问题:AppBarLayout 需要滚动同级,是的。但不仅仅是知道何时滚动”,而是实际调整同级的大小以使其正确地适应屏幕!AppBarLayout否则,同级将保持其配置的大小,并将按!的高度向下推到屏幕外。您甚至可以在 Android Studio 的布局编辑器中看到这一点。

长话短说:如果您要使用AppBarLayout,则需要用 标记您的视图之一app:layout_behavior="@string/appbar_scrolling_view_behavior",无论它是否是滚动视图。


ish*_*ley 7

app:layout_behavior 应该设置为协调器布局的直接子视图