9

我使用下面的佈局,CoordinatorLayout內部保持它AppBarLayout(隨着ToolbarTabLayout裏面)和一個佔位符RelativeLayout,這樣我就可以添加和替換它的片段。CoordinatorLayout與工具欄和片段

我遇到了margin margin錯誤,我在RelativeLayout上添加的片段總是會超出屏幕底部(類似於AppBarLayout高度的大小),我試着將它的高度設置爲wrap_contentmatch_parent,在這兩種情況下,它都會過度。

如果我從RelativeLayout中刪除app:layout_behavior="@string/appbar_scrolling_view_behavior",那麼它的頂部將在AppBarLayout之下,這也不是期望的結果。

<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
android:id="@+id/drawer_layout" 
android:layout_height="match_parent" 
android:layout_width="match_parent" 
android:fitsSystemWindows="true"> 

    <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/appbar" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:theme="@style/ThemeOverlay.AppCompat.Dark.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:popupTheme="@style/ThemeOverlay.AppCompat.Light" 
       app:layout_scrollFlags="scroll|enterAlways" /> 

      <android.support.design.widget.TabLayout 
       android:id="@+id/tabs" 
       app:tabIndicatorHeight="4dp" 
       app:tabIndicatorColor="#ffffff" 
       app:tabMode="scrollable" 
       android:visibility="gone" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" /> 

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


     <RelativeLayout 
      app:layout_behavior="@string/appbar_scrolling_view_behavior" 
      android:id="@+id/main_fragment_container" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content"/> 


     <android.support.design.widget.FloatingActionButton 
      android:id="@+id/fab" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_gravity="end|bottom" 
      android:layout_margin="20dp" 
      android:src="@drawable/ic_done" /> 


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

<android.support.design.widget.NavigationView 
    android:id="@+id/nav_view" 
    android:layout_height="match_parent" 
    android:layout_width="wrap_content" 
    android:layout_gravity="start" 
    android:fitsSystemWindows="true" 
    app:headerLayout="@layout/nav_header" 
    app:menu="@menu/drawer_view"/> 

</android.support.v4.widget.DrawerLayout> 
+0

你能舉一個更好的例子嗎?那'RelativeLayout'不會做任何事情,並且由於'wrap_content',技術上'0'的高度,除非你以編程的方式做它。如果您打算將它用作「包含器」,請使用「FrameLayout」。 –

+0

我把它放在一個片段上,做一個片段事務並提供RelativeLayout的id,我也嘗試使用FrameLayout相同的結果。 – Calc

+0

很顯然,你從Chris Banes的例子中得到了這個:https://github.com/chrisbanes/cheesesquare/blob/master/app/src/main/res/layout/include_list_viewpager.xml。注意他的'ViewPager'使用'match_parent'? –

回答

0

問題已通過更新recyclerview庫(以com.android.support:recyclerview-v7:22.2.0)

我是裝在它有一個recyclerview片段解決。

2

如果您在片段中有ScrollView,您也會看到此問題。因此,請確保您使用,而不是NestedScrollView:

<android.support.v4.widget.NestedScrollView 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent"> 
+0

LinearLayout怎麼樣?我遇到類似的問題。 – Calc

+0

你可以將它包裝在NestedScrollView中嗎? – bkurzius

3

我已經在工具欄下方顯示片段使用協調佈局時想通了這個問題。在我的情況的問題是:

In this image it shows the Fragment is overlapped by Toolbar.

現在只是把你AppBarLayout和FrameLayout裏內的LinearLayout像下面,

<LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:orientation="vertical"> 

     <android.support.design.widget.AppBarLayout 
      android:id="@+id/mainappbar" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:theme="@style/AppTheme.AppBarOverlay"> 

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

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

     <FrameLayout 
      android:id="@+id/frame_container" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent"/> 
    </LinearLayout> 

現在你的問題就解決了。它會是這樣的。

The final image.

+0

'AppBarLayout'應該是'CoordinatorLayout'的直接子節點。請參閱:http://developer.android.com/reference/android/support/design/widget/AppBarLayout.html – Orbit

1

有同樣的問題。將RelativeLayout更改爲FrameLayout並使用參數app:layout_behavior="@string/appbar_scrolling_view_behavior"解決了我的問題。

<FrameLayout 
    android:id="@+id/main_fragment_container" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    app:layout_behavior="@string/appbar_scrolling_view_behavior"/>