应该在哪里应用:layout_behavior'被设定?

时间:2016-02-03 15:38:03

标签: android android-layout material-design android-coordinatorlayout vertical-scrolling

是应该在AppBarLayout兄弟的父母或其兄弟姐妹的第一个可滚动视图中设置?

使用Material Design for AndroidViews可让我们根据周围环境处理布局的行为,其中一个是CoordinatorLayoutthis CodePath guide提及:

  

CoordinatorLayout扩展了完成许多任务的能力   Google的Material Design滚动效果。目前,有   这个框架中提供了几种允许它在没有的情况下工作的方法   需要编写自己的自定义动画代码。

我现在感兴趣的是:

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

因此,我们会将AppBarLayoutToolbar设置为app:layout_scrollFlags,将另一个ViewGroup兄弟设置为AppBarLayout app:layout_behavior

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

到目前为止,我已经尝试过(并且他们都工作,他们都是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/

5 个答案:

答案 0 :(得分:20)

点击此链接: 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>
  

我的问题是:我们应该准确ViewGroup(或者View)   那app:layout_behavior

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

  

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

答案 1 :(得分:15)

确保在 String.xml

中添加 appbar_scrolling_view_behavior 字段
<!-- The class name to the ScrollingChildBehavior required for AppBarLayout -->
<string name="appbar_scrolling_view_behavior" translatable="false">android.support.design.widget.AppBarLayout$ScrollingViewBehavior</string>

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

<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" />

仅供参考而非OP答案。

答案 2 :(得分:6)

{ "PHP_EXTENSIONS": ["pdo", "pdo_mysql"] }应设置为协调员布局

的直接子视图

答案 3 :(得分:2)

<块引用>

AppBarLayout 还需要一个单独的滚动兄弟 知道何时滚动。

这个来自 Android 的描述非常不完整,让我浪费了数小时的时间。

滚动兄弟用词不当,不需要是任何类型的滚动视图。

例如,在我的 AppBarLayout 下方,我使用的 ViewPager2 将呈现 Fragment 将呈现 Scrollview,因此我需要设置 {{ 1}} 直接在主布局中的 app:layout_behavior="@string/appbar_scrolling_view_behavior" 上,NOT 在片段布局中深度嵌套的 ViewPager2

我也没有用在屏幕上或屏幕外滚动 Scrollview 或其任何子项,所以我错误地认为我可以不设置 AppBarLayout 任何地方。

错误。

这揭示了一个更隐蔽的问题:app:layout_behavior 需要滚动兄弟,是的。但不是只是“知道何时滚动”,而是实际调整兄弟姐妹的大小以使其正确地显示在屏幕上!否则,同级将保持其配置的大小,并将被 AppBarLayout 的高度向下推到屏幕外!您甚至可以在 Android Studio 的布局编辑器中看到这一点。

长话短说:如果您要使用 AppBarLayout,您需要AppBarLayout 标记您的一个视图,无论它是否是滚动视图.

答案 4 :(得分:1)

对于将CoordinatorLayoutFragmentContainerAppBarLayout结合使用的人:

  • 最好在容器上设置app:layout_behavior(不仅在NestedScrollViewRecyclerView上)。它会删除FragmentContainer的不必要的底部边距,并确保在显示键盘时隐藏应用栏。