0

我試圖在我的應用程序中實現CoordinatorLayout。 我嘗試了很多不同的教程,我也嘗試在我的問題上適應CoordinatorLayout + AppBarLayout + NavigationDrawer的解決方案,但我無法弄清楚它爲什麼不起作用。CoordinatorLayout + Fragment + NavigationDrawer

<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
android:id="@+id/main_content" 
android:layout_width="match_parent" 
android:layout_height="match_parent"> 

<android.support.design.widget.AppBarLayout 
    android:id="@+id/id_appbar" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:background="@android:color/transparent" 
    android:fitsSystemWindows="true"> 

    <android.support.design.widget.CollapsingToolbarLayout 
     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"> 

     <ImageView 
      android:id="@+id/expandedImage" 
      android:layout_width="match_parent" 
      android:layout_height="200dp" 
      android:scaleType="centerCrop" 
      android:src="@drawable/header" 
      app:layout_collapseMode="parallax" 
      app:layout_collapseParallaxMultiplier="0.7" /> 

     <android.support.v7.widget.Toolbar 
      android:id="@+id/toolbar_actionbar" 
      android:layout_width="match_parent" 
      android:layout_height="?attr/actionBarSize" 
      android:background="@android:color/transparent" 
      android:minHeight="@dimen/abc_action_bar_default_height_material" 
      app:layout_scrollFlags="scroll|enterAlways" /> 
    </android.support.design.widget.CollapsingToolbarLayout> 

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

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

    <FrameLayout 
     android:id="@+id/container" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:clickable="true"> 

     <Button 
      android:id="@+id/emiter" 
      android:layout_width="match_parent" 
      android:layout_height="0dp" 
      android:layout_gravity="center_horizontal|top" 
      android:layout_marginTop="-70dp" 
      android:text="" /> 
    </FrameLayout> 

    <fragment 
     android:id="@+id/fragment_drawer" 
     android:name="com.myapp.test.navigationdrawer.NavigationDrawerFragment" 
     android:layout_width="@dimen/navigation_drawer_width" 
     android:layout_height="match_parent" 
     android:layout_gravity="start" 
     app:layout="@layout/fragment_navigation_drawer" /> 
</android.support.v4.widget.DrawerLayout> 

協調本身似乎是工作,因爲我可以得到的效果,但只有當「滾動」使用工具欄在屏幕的上半部分。它不適用於我的ScrollView在ToolBar下面的Fragment中。 我在做什麼錯?

+0

什麼是不工作?您所談論的ScrollView/Fragment不是問題中代碼的一部分? – jayeshsolanki93

+0

@ jayeshsolanki93是的,片段是不同的,我用fragmentTransaction.replace(R.id.container,newFragment)改變它們; – user754730

回答

1

它不會在我的片段

爲我的滾動型工作CoordinatorLayout可以只聽嵌套的滾動。使用NestedScrollViewRecyclerView作爲根視圖,您將在您的活動中添加每個片段,並且CoordinatorLayout將接收滾動事件。

像這樣:

activity.xml

<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
android:id="@+id/main_content" 
android:layout_width="match_parent" 
android:layout_height="match_parent"> 

<android.support.design.widget.AppBarLayout 
    android:id="@+id/id_appbar" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:background="@android:color/transparent" 
    android:fitsSystemWindows="true"> 

    <android.support.design.widget.CollapsingToolbarLayout 
     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"> 

     <ImageView 
      android:id="@+id/expandedImage" 
      android:layout_width="match_parent" 
      android:layout_height="200dp" 
      android:scaleType="centerCrop" 
      android:src="@drawable/test" 
      app:layout_collapseMode="parallax" 
      app:layout_collapseParallaxMultiplier="0.7" /> 

     <android.support.v7.widget.Toolbar 
      android:id="@+id/toolbar_actionbar" 
      android:layout_width="match_parent" 
      android:layout_height="?attr/actionBarSize" 
      android:background="@android:color/transparent" 
      android:minHeight="@dimen/abc_action_bar_default_height_material" 
      app:layout_scrollFlags="scroll|enterAlways" /> 
    </android.support.design.widget.CollapsingToolbarLayout> 

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

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

    <FrameLayout 
     android:id="@+id/container" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:clickable="true"> 

     <Button 
      android:id="@+id/emiter" 
      android:layout_width="match_parent" 
      android:layout_height="0dp" 
      android:layout_gravity="center_horizontal|top" 
      android:layout_marginTop="-70dp" 
      android:text="" /> 
    </FrameLayout> 

    <fragment 
     android:id="@+id/fragment_drawer" 
     class="ru.solodovnikov.test.MainFragment" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 
</android.support.v4.widget.DrawerLayout> 

fragment.xml之

<?xml version="1.0" encoding="utf-8"?> 
<android.support.v4.widget.NestedScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 
    <TextView 
     android:layout_width="match_parent" 
     android:text="TOOOOOO LONG TEXT..." 
     android:layout_height="wrap_content" /> 
</android.support.v4.widget.NestedScrollView> 
+0

所以我不能用它作爲片段呢? – user754730

+0

您可以使用ScrollView。但是CoordinatorLayout不會收到滾動事件,並且它內部的視圖不會對滾動做出反應。所以只需將您的ScrollView更改爲NestedScrollView即可。 – Zellius

+0

所以基本上我不能在我的acitivity_main.xml文件中使用這段代碼(所以我只需要它一次),但是我必須將它添加到每個Fragment的佈局xml文件中? – user754730