在CoordinatorLayout中添加工具栏下方的视图

Won*_*abo 162 android android-toolbar androiddesignsupport android-coordinatorlayout

我有以下布局:

<android.support.design.widget.CoordinatorLayout
    android:id="@+id/main_content"
    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.design.widget.AppBarLayout
        android:id="@+id/appBar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/ThemeOverlay.AppCompat.ActionBar">

        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:background="?attr/colorPrimary"
            app:layout_scrollFlags="scroll|enterAlways"
            app:popupTheme="@style/ThemeOverlay.AppCompat.Light"/>

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

    <FrameLayout
        android:id="@+id/content"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        />
</android.support.design.widget.CoordinatorLayout>
Run Code Online (Sandbox Code Playgroud)

我添加了Fragments FrameLayout,替换它们.我的一个Fragment的一个是列表,它具有以下布局:

<android.support.v7.widget.RecyclerView
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/recyclerView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"/>
Run Code Online (Sandbox Code Playgroud)

我的问题是工具栏是在列表上绘制的.我试图通过将内容包装CoordinatorLayout成a LinearLayout来解决这个问题,这解决了透支问题,但这样appbar滚动行为就不再起作用了.

任何帮助深表感谢!

kri*_*son 338

拿属性

app:layout_behavior="@string/appbar_scrolling_view_behavior"
Run Code Online (Sandbox Code Playgroud)

关闭RecyclerView并把它放在FrameLayout你试图显示的下面Toolbar.

我发现滚动视图行为的一个重要方面是在工具栏下面布局组件.因为FrameLayout有一个将会滚动(RecyclerView)的后代,所以CoordinatorLayout会得到那些用于移动的滚动事件Toolbar.


另一件需要注意的事情是:布局行为将导致FrameLayout高度的大小就像Toolbar已经滚动一样,并且Toolbar完全显示整个视图只需按下以使视图的底部低于底部CoordinatorLayout.

这对我来说是一个惊喜.我希望在工具栏上下滚动时动态调整视图大小.因此,如果您在视图底部有一个带有固定组件的滚动组件,则在完全滚动之前,您将看不到该底部组件Toolbar.

因此,当我想在UI的底部锚定一个按钮时,我通过将按钮放在CoordinatorLayout(android:layout_gravity="bottom")的底部并将等于按钮高度的底部边距添加到工具栏下方的视图来解决这个问题.


Mic*_*l G 77

我设法通过添加:

机器人:layout_marginTop = "机器人:ATTR/actionBarSize"

像这样的FrameLayout:

 <FrameLayout
        android:id="@+id/content"
        android:layout_marginTop="?android:attr/actionBarSize"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
       />
Run Code Online (Sandbox Code Playgroud)

  • 而不是添加marginTop添加app:layout_behavior ="@ string/appbar_scrolling_view_behavior" (7认同)
  • @ string/appbar_scrolling_view_behavior不可用时的完美解决方案 (3认同)
  • 这对于CollapsingToolbarLayout不起作用 (3认同)
  • 这有点像hacky,添加一个大小可能的边距(假设你将总是有一个大小的工具栏)将在某个时候打破 (3认同)