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