是否应该设置为应用栏布局兄弟姐妹的父级还是其兄弟姐妹中的第一个可滚动视图?


Android 的材料设计, 有意见让我们根据其周围环境来处理布局的行为,其中之一是协调器布局, 作为这个 CodePath 指南提到:

CoordinatorLayout 扩展了完成许多 Google Material Design 滚动效果的能力。

我现在感兴趣的是:

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

所以,我们会使用应用栏布局与一个工具栏app:layout_scrollFlags一套和另一套视图组兄弟姐妹应用栏布局app:layout_behavior

我的问题是:我们应该把它放在哪个 ViewGroup (或者也许是 View)中app:layout_behavior


到目前为止,我已经尝试过(他们都有worked,并且它们都是 AppBarLayout 的兄弟):

  • 滚动视图

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

  • ViewGroup 内的 ScrollView

而这个不起作用:

  • 没有可滚动视图子级的 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/

答案

Check this link: https://developer.android.com/reference/android/support/design/widget/AppBarLayout.html

AppBarLayout还需要一个单独的滚动兄弟以便知道何时滚动。AppBarLayout.ScrollingViewBehavior班级,meaning that you should set your scrolling view’s behavior to be an instance of 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>

My question is: 具体在什么方面ViewGroup(或者可能View)我们应该这样说吗app:layout_behavior

并在此链接中:http://guides.codepath.com/android/Handling-Scrolls-with-CoordinatorLayout

接下来,我们需要定义an association betweenAppBarLayoutthe View that will be scrolledapp:layout_behavior到一个RecyclerView或任何其他能够嵌套滚动的视图,例如NestedScrollView@string/appbar_scrolling_view_behavior that maps to AppBarLayout.ScrollingViewBehavior, which is used to notify the AppBarLayout when scroll events occur on this particular view

来自: stackoverflow.com