【问题标题】:How to collapse content of AppBarLayout but not Toolbar如何折叠 AppBarLayout 的内容而不是工具栏
【发布时间】:2016-05-21 11:14:02
【问题描述】:

这是我的应用程序屏幕:

和布局xml:

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

<android.support.design.widget.AppBarLayout
    android:id="@+id/app_bar_layout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:animateLayoutChanges="true">

    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        app:title="@string/app_name"
        app:theme="@style/Toolbar"
        app:popupTheme="@style/ThemeOverlay.AppCompat.Dark" />

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

<android.support.design.widget.FloatingActionButton
    android:id="@+id/fab"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="bottom|end"
    android:layout_margin="16dp"
    android:src="@drawable/arrow_right_bold"
    app:fabSize="normal" />

我想在滚动时折叠内容。

我发现我可以将Toolbar 移出AppBarLayout 但是否有明确的方法?否则,我将被强制设置工具栏background color。我对此没有任何问题,但我认为这是某种肮脏的解决方案:)

那么。如何折叠AppBarLayout而不是Toolbar的内容?

【问题讨论】:

标签: android android-layout android-toolbar android-design-library android-appbarlayout


【解决方案1】:

您只需将CoordinatorLayout 包装到LinearLayout 并将您的工具栏放在CoordinatorLayout 上方:

<LinearLayout
  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:orientation="vertical"
  >
  
  <android.support.v7.widget.Toolbar
    android:id="@+id/toolbar"
    android:layout_width="match_parent"
    android:layout_height="?attr/actionBarSize"
    />
  
  <android.support.design.widget.CoordinatorLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/bg_start"
    >
    
    <android.support.design.widget.AppBarLayout
      android:layout_width="match_parent"
      android:layout_height="300dp"
      >
      
      <android.support.design.widget.CollapsingToolbarLayout
        android:id="@+id/main.collapsing"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_scrollFlags="scroll|exitUntilCollapsed"
        >
       
        <LinearLayout
          android:layout_width="match_parent"
          android:layout_height="wrap_content"
          android:orientation="vertical"
          app:layout_collapseMode="parallax"
          >
          
          <!-- Collapsed content -->
          
        </LinearLayout>
      
      </android.support.design.widget.CollapsingToolbarLayout>
      
    </android.support.design.widget.AppBarLayout>
    
    <android.support.v4.widget.NestedScrollView
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      app:layout_behavior="@string/appbar_scrolling_view_behavior"
      >
      
      <!-- Another content -->
     
    </android.support.v4.widget.NestedScrollView>
    
  </android.support.design.widget.CoordinatorLayout>
  
</LinearLayout>

【讨论】:

    【解决方案2】:

    可能我来晚了,但如果您仍然需要解决此问题的方法,可以关注这篇文章。

    The power of AppBarLayout offset

    他只是将工具栏放在 CoordinatorLayout 之外。我知道这很激进,但这是我找到的唯一方法。

    【讨论】:

      【解决方案3】:

      如果我理解正确,您希望在滚动时折叠部分标题。如果是这种情况,@Nerd 的评论链接到一个很好的教程,说明如何做到这一点。无论如何,我将在这里留下一个 CoordinatorLayout 用法示例,它可以满足您的需求:

      <?xml version="1.0" encoding="utf-8"?>
      <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:fitsSystemWindows="true">
      
          <android.support.design.widget.AppBarLayout
              android:id="@+id/app_bar_layout"
              android:layout_width="match_parent"
              android:layout_height="wrap_content"
              android:fitsSystemWindows="true"
              android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
      
              <android.support.design.widget.CollapsingToolbarLayout
      
                  android:id="@+id/collapsing_toolbar"
                  android:layout_width="match_parent"
                  android:layout_height="match_parent"
                  android:fitsSystemWindows="true"
                  app:contentScrim="?attr/colorPrimary"
                  app:expandedTitleMarginEnd="64dp"
                  app:expandedTitleMarginStart="48dp"
                  app:layout_scrollFlags="scroll|exitUntilCollapsed">
      
                  <FrameLayout
                      android:layout_width="match_parent"
                      android:layout_height="match_parent">
      
                      <!-- PUT HERE THE PORTION OF THE HEADER YOU WANT TO COLLAPSE WHEN SCROLLING-->
                  </FrameLayout>
      
                  <android.support.v7.widget.Toolbar
                      android:id="@+id/toolbar"
                      android:layout_width="match_parent"
                      android:layout_height="?attr/actionBarSize"
                      app:layout_collapseMode="pin"
                      app:popupTheme="@style/ThemeOverlay.AppCompat.Light"/>
      
      
              </android.support.design.widget.CollapsingToolbarLayout>
          </android.support.design.widget.AppBarLayout>
      
          <android.support.v4.widget.NestedScrollView
              android:id="@+id/scroll"
              android:layout_width="match_parent"
              android:layout_height="wrap_content"
              android:clipToPadding="false"
              app:layout_behavior="@string/appbar_scrolling_view_behavior">
      
              <!-- YOUR SCROLLABLE CONTENT HERE -->
          </android.support.v4.widget.NestedScrollView>
      
          <android.support.design.widget.FloatingActionButton
              android:id="@+id/fab"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:layout_margin="16dp"
              android:clickable="true"
              app:layout_anchor="@id/app_bar_layout"
              app:layout_anchorGravity="bottom|right|end"/>
      </android.support.design.widget.CoordinatorLayout>
      

      【讨论】:

      • 谢谢,但这不是我想要的。我已经更新了相关图片,以便更清楚地了解我想要的内容。
      • 对不起,我还是不明白。使用我回复中的代码,如果您将可折叠部分放在FrameLayout 中,您将获得折叠该部分的效果。你可以把任何你需要的东西放在那里。你想要的行为是否遵循this patterns 中的任何一个?
      • 我做到了,但没有达到预期:youtube.com/watch?v=nYXWgwO14AQ&feature=youtu.be 有我的布局 xml:pastebin.com/eTZYQCiD(AppBarLayout 的孩子在执行时添加)但是,正如您所看到的,工具栏没有阴影它放置在 AppBarLayout 之外。我的情况还有其他解决方案吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多