繁体   English   中英

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

[英]Where should 'app:layout_behavior' be set?

它应该设置在AppBarLayout兄弟姐妹的父级还是其兄弟姐妹内的第一个可滚动视图?


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

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

我现在感兴趣的是:

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

因此,我们将使用AppBarLayout一个工具栏app:layout_scrollFlags设置和其他的ViewGroup兄弟到AppBarLayoutapp:layout_behavior

我的问题是:我们应该将该app:layout_behavior放在哪个 ViewGroup(或者可能是 View)中?


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

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

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

他们提到了这一点,它应该是将在AppBarLayout下显示的View ,如下所示:

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

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

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

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

请确保你在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 答案。

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

我必须将以下内容添加到 gradle 文件中,否则它会给我一个编译错误。

implementation 'com.google.android.material:material:1.0.0'

希望这也能帮助其他人!

对于将CoordinatorLayoutFragmentContainerAppBarLayout一起使用的人:

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

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

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

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

例如,在我的AppBarLayout下方,我使用的是ViewPager2 ,它将呈现一个将呈现ScrollviewFragment ,所以我需要直接在主布局的ViewPager2上设置app:layout_behavior="@string/appbar_scrolling_view_behavior" ,而不是在片段布局中深度嵌套Scrollview

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

错误的。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM