9

Я использую макет ниже, CoordinatorLayout держит внутри него AppBarLayoutToolbar и TabLayout внутри него) и заполнителем RelativeLayout, так что я мог бы добавить и заменить фрагменты на нем.CoordinatorLayout с панели инструментов и фрагмент

Я столкнулся с ошибками на границе, фрагменты, которые я добавляю на RelativeLayout, всегда будут расширяться за пределы нижней части экрана (в размере, подобном размеру AppBarLayout), я пробовал установить его высоту wrap_content и match_parent, в обоих случаях он выходит за борт.

, если я удалю app:layout_behavior="@string/appbar_scrolling_view_behavior" из RelativeLayout, верхняя часть его будет находиться под номером 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' ничего не делает и имеет высоту технически' 0' из-за 'wrap_content', если вы не делаете что-то с ним программно. Если вы собираетесь использовать его как «сдерживающий», используйте «FrameLayout». –

+0

Я помещаю на него фрагмент, выполняя транзакцию фрагмента и предоставляя идентификатор RelativeLayout, я также пытался использовать FrameLayout тот же результат. – Calc

+0

Очевидно, что вы получили это из примера Криса Банеса: 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"/> 
Смежные вопросы