9

Я хотел бы знать, можно ли прокручивать всю строку состояния (значки и фон), а не только фон. Почти как если бы он был частью панели инструментов.Возможно ли, чтобы строка состояния прокручивалась вместе с панелью инструментов с использованием схемы координатора на Android?

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

Android status bar scrolling up with coordinator layout, leaving status icons overlapping toolbar title

Вот графический

enter image description here

Вот мой код

<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" 
    android:fitsSystemWindows="true" 
    tools:context="me.hugopretorius.wishlizt.MainActivity"> 

    <android.support.design.widget.AppBarLayout 
     android:id="@+id/appbar" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:theme="@style/AppTheme.AppBarOverlay" 
     app:contentScrim="#000"> 

     <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" 
      app:popupTheme="@style/AppTheme.PopupOverlay" 
      /> 

     <android.support.design.widget.TabLayout 
      android: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/viewpager" 
     app:layout_behavior="@string/appbar_scrolling_view_behavior" 
     android:layout_width="match_parent" 
     android:layout_height="fill_parent" 
     android:layout_below="@id/tabs"/> 

    <io.github.yavski.fabspeeddial.FabSpeedDial 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="bottom|end" 
     app:fabGravity="bottom_end" 
     app:fabMenu="@menu/menu_fab" 
     app:miniFabBackgroundTint="@android:color/white" 
     app:miniFabDrawableTint="?attr/colorPrimaryDark" 
     app:miniFabTitleTextColor="?attr/colorPrimaryDark" /> 

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

Итак, Другими словами, вы пытаетесь показать ** только «TabLayout» ** и скрываете «StatusBar», верно? – Mohsen

+0

Конечно, ** Я не думаю, что если вы найдете ответ от «достоверных и/или официальных источников», так как не рекомендуется, чтобы андроид скрывал «StatusBar», когда «Панель инструментов» скрыта, и там это просто «TabLayout» AFAIK. – Mohsen

+0

@Mohsen Я бы хотел показать StatusBar, когда панель инструментов видна (когда пользователь прокручивается вверх) и не выводит на экран как StatusBar, так и панель инструментов, когда пользователь прокручивается вниз. В настоящее время моими опциями являются 1. hide или 2. show StatusBar. На ней нет прокрутки, как на панели инструментов. –

ответ

0

Попробуйте добавить это к вашему onResume вашей деятельности

View decorView = getWindow().getDecorView(); 
int uiFlagFullscreen = View.SYSTEM_UI_FLAG_FULLSCREEN; 
decorView.setSystemUiVisibility(uiFlagFullscreen); 
2

Вы должны быть в состоянии слушать прокручивать изменения и скрыть строку состояния после того, как панель инструментов разрушается. Это не даст вам фактической инкрементной прокрутки, но оставит вам только те вкладки, которые вам нужны.

Во-первых, OnCreate устанавливают флаги так, что макет не будет прыгать, когда бар исчезает:

//root should be your coordinator/top level layout 
mRoot.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE 
          | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN); 

После панель разрушается, измените строку состояния на скрытые:

appBarLayout.addOnOffsetChangedListener(new AppBarLayout.OnOffsetChangedListener() { 
    @Override 
    public void onOffsetChanged(AppBarLayout appBarLayout, int verticalOffset) { 
     if (Math.abs(verticalOffset) == appBarLayout.getTotalScrollRange()) { 

      // Collapsed 
      mRoot.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE 
             | View.SYSTEM_UI_FLAG_FULLSCREEN); //this one changed 

     } else if (verticalOffset == 0) { 

      // Fully Expanded - show the status bar 
      if (Build.VERSION.SDK_INT >= 16) { 
       mRoot.setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE 
              | View.SYSTEM_UI_FLAG_LAYOUT_STABLE 
              | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN); 
      } else { 
       getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); 
      } 

     } else { 
      // Somewhere in between 
      // We could optionally dim icons in this step by adding the flag: 
      // View.SYSTEM_UI_FLAG_LOW_PROFILE 
     } 
    } 
}); 
+0

В идеальном случае строка состояния/системная панель должна быть скрыта только для погружения, где нам нужен полный экран. Но при наличии панели вкладок мы должны внимательно рассмотреть возможность изменения системных баров, поскольку они предоставляют пользователям стандартный способ навигации по устройству и просмотра его статуса в соответствии с https://developer.android.com/training/system-ui/index.html , Но если нам действительно нужно скрыть строку состояния с отображаемой вкладкой, это кажется самым близким решением. У него не будет желаемой анимации и, как правило, не рекомендуется в руководстве по дизайну Android, поэтому нужно подумать дважды, прежде чем выбирать его. – random

+1

Спасибо, Ник, это очень полезно, и я буду использовать это. Несмотря на то, что у него нет анимации прокрутки, с небольшим количеством стилей я могу сделать этот вид приятным. –