12

Я пытаюсь изучить CoordinatorLayout и его функции. Я использовал его совместно с AppBarLayout. Мой XML выглядит следующим образом:Прокрутка панели инструментов под строкой состояния

<android.support.design.widget.CoordinatorLayout 

android:id="@+id/content" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="vertical" 
xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto"> 

    <android.support.v7.widget.RecyclerView 
     android:id="@+id/recycler" 
     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/appBarLayout" 
     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.AppBarLayout> 

    <android.support.design.widget.FloatingActionButton 
     android:id="@+id/fab" 
     android:layout_gravity="bottom|end" 
     style="@style/FabStyle"/> 

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

Проблема я столкнулся в том, что панель при прокрутке идет под статусной строке. Я хочу, чтобы панель инструментов прокручивалась, когда я просматриваю представление Recycler, но я не хочу, чтобы он попадал в строку состояния. Как предотвратить это.

Кроме того, когда я пытаюсь инкапсулировать координаторLayout внутри другого макета, например: LinearLayout, цвет первичного цвета, определенный в теме, не отображается в строке состояния. Он показывает цвет primaryDark, когда я использую его, как указано выше xml. Есть лучший способ сделать это?

ответ

11

Я исправил это, перейдя в стиль, который управляет цветом строки состояния и менял его на тот цвет, который я хотел вместо прозрачного. Теперь кажется, что строка состояния находится поверх панели инструментов.

<resources>> 
<style name="AppTheme.NoActionBar"> 
    <item name="windowActionBar">false</item> 
    <item name="windowNoTitle">true</item> 
    <item name="android:windowDrawsSystemBarBackgrounds">true</item> 
    <item name="android:statusBarColor">@android:color/transparent</item> 
</style> 

`

<resources>> 
<style name="AppTheme.NoActionBar"> 
    <item name="windowActionBar">false</item> 
    <item name="windowNoTitle">true</item> 
    <item name="android:windowDrawsSystemBarBackgrounds">true</item> 
    <item name="android:statusBarColor">@color/colorPrimaryDark</item> 
</style> 

7

У меня была аналогичная проблема. Шахта была решена.

Добавлено android:fitsSystemWindows="true" в theAppBarLayout. Добавлен app:layout_scrollFlags="scroll|enterAlways|snap" для панели инструментов Ниже представлен макет.

<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
tools:context=".HomeActivity"> 

<android.support.design.widget.AppBarLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:fitsSystemWindows="true" 
    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|snap" 
      app:popupTheme="@style/AppTheme.PopupOverlay" /> 

    <android.support.design.widget.TabLayout 
     android:id="@+id/id_tabs" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"/> 

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

<android.support.v4.view.ViewPager 
    android:id="@+id/id_viewpager" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    app:layout_behavior="@string/appbar_scrolling_view_behavior" /> 

<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="@dimen/fab_margin" 
    android:src="@android:drawable/ic_dialog_email"/> 
+0

Я добавлял 'android: fitsSystemWindows =" true "' to CoordinatorLayout по ошибке. Проблема теперь решена путем удаления 'android: fitsSystemWindows =" true "' из CoordinatorLayout, который был корневым представлением и вместо этого добавлен в AppbarLayout. –

0

вы можете добавить вид корневой тег CoordinatorLayout и fitsystemwindows = true снова.