9

Я разрабатываю приложение для Android, используя новую библиотеку дизайна. Я хотел бы создать аналогичный эффект прокрутки, который используется в новом Google Photos app. Я бы хотел, чтобы AppBarLayout полностью прокручивал экран так, чтобы просмотр recycler прокручивался за панель состояния.Как заставить AppBarLayout полностью исчезнуть с помощью windowTranslucentStatus, установленного в true

Я установил windowTranslucentStatus в true в теме приложения. Вот XML основной деятельности:

<?xml version="1.0" encoding="utf-8"?> 
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <android.support.v7.widget.RecyclerView 
     android:id="@+id/recyclerView" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     app:layout_behavior="@string/appbar_scrolling_view_behavior" /> 

    <android.support.design.widget.AppBarLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"> 

     <android.support.v7.widget.Toolbar 
      android:id="@+id/toolbar" 
      android:layout_width="match_parent" 
      android:layout_height="?attr/actionBarSize" 
      app:layout_scrollFlags="scroll|enterAlways" /> 

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

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

Вот как это выглядит, когда прокручивается вниз: Toolbar not disappearing completely

Панель полностью не исчезнет.

Спасибо за помощь!

+1

Я начинаю задаваться вопросом, если они даже использовали CoordinatorLayout ... Я весь день застрял в этом точном вопросе. – timothyjc

+0

@timothyjc Если вы найдете решение, прежде чем я это сделаю, можете ли вы отправить его здесь. И я думаю, что ты прав Да – alesko007

+0

Загрузил мой пример проекта в github, если кто-то хочет легко увидеть проблему ... https://github.com/timothyjc/TestALot – timothyjc

ответ

0

Это было так близко, как я мог бы получить с CoordinatorLayout (просто играя с полями на панели инструментов) ... не достаточно близко имо:

<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:fitsSystemWindows="true" 
    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.support.v7.widget.Toolbar 
     android:id="@+id/toolbar" 
     android:paddingTop="25dp" 
     android:layout_width="match_parent" 
     android:layout_height="81dp" 
     android:layout_marginTop="-28dp" 
     android:background="#00ffffff" 
     app:layout_scrollFlags="scroll|enterAlways" /> 

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

<android.support.v7.widget.RecyclerView 
    android:id="@+id/recyclerview" 
    android:background="#ffffff" 
    android:fitsSystemWindows="true" 
    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="end|bottom" 
    android:layout_margin="16dp" 
    android:src="@drawable/ic_headphones_white_24dp" /> 

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

Я думаю, что это будет легче сделать это вручную ...

У вас есть идеи или прогресс?

+0

Я пытаюсь выработать что-то с установкой высоты и полей на координатор. Однако это создает новые проблемы. Вы поняли это? – alesko007

+0

Какой-то парень на Reddit сказал мне, что есть ошибка, и будет исправлена ​​следующая версия библиотеки поддержки. В итоге я сделал все анимации вручную. – timothyjc

+0

@timothyjc fitsSystemWindows также должен быть в AppBarLayout. И андроид: windowDrawsSystemBarBackgrounds = true должен быть там в стилях v-21.xml Это то, что я сделал, чтобы заставить его работать. – Suleiman19

-1

Добавить fitsSystemWindows = "true" для вашего AppBarLayout и CoordinatorLayout.


+0

Это не работает – alesko007

+0

Это не делает панель инструментов прозрачной. –

0

В моем случае я добавил fitSystemWindows = «ложь» в CoordinatorLayout и fitSystemWindows = «истинного» к своему ребенку - в вашем случае к RecyclerView. В NavigationView, DrawerLayout, AppBarLayout и панели инструментов «true». Я пробовал разные ценности, а потом что-то ломается в моем случае. Android 5.1.1 и новейшие библиотеки поддержки (23.0.1). Надеюсь, поможет.

1

Вот что я использовал в моем приложении

<android.support.design.widget.AppBarLayout 
    android:id="@+id/app_bar" 
    android:layout_width="match_parent" 
    android:layout_height="@dimen/app_bar_height" 
    android:fitsSystemWindows="true" 
    android:theme="@style/AppTheme.AppBarOverlay"> 

    <android.support.design.widget.CollapsingToolbarLayout 
     android:id="@+id/toolbar_layout" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:fitsSystemWindows="true" 
     app:contentScrim="?attr/colorPrimary" 
     app:layout_scrollFlags="scroll|enterAlwaysCollapsed"> 

     <android.support.v7.widget.Toolbar 
      android:id="@+id/toolbar" 
      android:layout_width="match_parent" 
      android:layout_height="?attr/actionBarSize" 
      app:layout_collapseMode="pin" 
      app:popupTheme="@style/AppTheme.PopupOverlay" /> 

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

Используйте общий образец AppBarLayout, который приходит из шаблона приложения при создании Android проекта в Android Studio. Всего несколько изменений в макете XML и Java код:

XML Layout:

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

    <FrameLayout 
     android:id="@+id/toolbar_container" 
     android:fitsSystemWindows="true" 
     app:layout_scrollFlags="scroll|enterAlways" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:background="?attr/colorPrimary" 
     > 

     <android.support.v7.widget.Toolbar 
      android:id="@+id/toolbar" 
      android:layout_width="match_parent" 
      android:layout_height="?attr/actionBarSize" 
      app:popupTheme="@style/AppTheme.PopupOverlay" 
      /> 

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

Java код:

ViewCompat.setOnApplyWindowInsetsListener(toolbar, new OnApplyWindowInsetsListener() { 
     @Override 
     public WindowInsetsCompat onApplyWindowInsets(View v, WindowInsetsCompat insets) { 
      toolbarContainerLayout.setPadding(0, insets.getSystemWindowInsetTop(), 0, 0); 

      return insets; 
     } 
    });