transparente oreo ocultar navegacion cambiar barra android android-fragments android-viewpager navigationbar

oreo - Barra de navegación de Android que cubre el contenido de viewpager



cambiar barra de navegacion android p (6)

¡No puedo evitar que la barra de navegación de sistemas cubra mi contenido!

Estoy en la parte inferior de la vista de reciclaje, pero se está ocultando detrás de la barra de navegación. Aquí está mi diseño XML.

<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/root" android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="true"> <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"> <include layout="@layout/toolbar"/> <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:fitsSystemWindows="true" android:id="@+id/viewpager" android:layout_width="wrap_content" android:layout_height="wrap_content" app:layout_behavior="@string/appbar_scrolling_view_behavior" /> <com.melnykov.fab.FloatingActionButton android:id="@+id/fab" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="bottom|right" android:layout_margin="16dp" app:fab_colorNormal="@color/accent" app:fab_colorPressed="@color/accent_dark" />

Aquí está el diseño de fragmentos que están viendo en la imagen.

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:padding="8dp"> <android.support.v7.widget.RecyclerView android:id="@+id/recyclerView" android:layout_width="match_parent" android:layout_height="match_parent" android:scrollbars="vertical"/> </FrameLayout>

He intentado agregar android: fitsSystemWindows = "true" en todos los diseños que pude pero eso no funcionó. Otros subprocesos mencionan la adición de margen calculado desde la barra, pero esa no parece la solución adecuada. Tomé este diseño directamente de la aplicación CheesSquare de Google que muestra la aplicación appbarlayout, y parece que funciona bien.


El problema es el uso de AppBarLayout . El CoordinatorLayout se introdujo como un potente FrameLayout que ofrece animaciones agradables basadas en Behaviors definidos. Si queremos agregar algún tipo de animación de scroll , como collapsing toolbar , etc., entonces tenemos que envolver nuestra Toolbar con AppBarLayout , pero cuando queremos colocar un contenido estático dentro de CoordinatorLayout , como ViewPager en su caso, no lo hacemos. t necesita usar AppBarLayout en absoluto:

activity_main.xml:

<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="com.mydemoci.MainActivity"> <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/AppTheme.PopupOverlay"/> <include layout="@layout/content_main"/> <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"/> </android.support.design.widget.CoordinatorLayout>

content_main.xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#A1D490" // Remember CoordinatorLayout is a kind of FrameLayout, // so we have to provide top margin to make Toolbar visible android:layout_marginTop="?attr/actionBarSize" tools:context="com.mydemoci.MainActivity" tools:showIn="@layout/activity_main"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_centerHorizontal="true" android:background="@color/colorAccent" android:text="Hello World" android:textSize="30sp"/> </RelativeLayout>


La vista de la raíz del fragmento de Viewpager tiene que ser RecyclerView o NestedScrollView . FrameLayout no admite el comportamiento de desplazamiento de CoordinatorLayout y es por eso que no funciona bien.

Cómo puede arreglar el diseño del fragmento del viewpager: no FrameLayout RecyclerView dentro de FrameLayout . En su lugar declara RecyclerView en la raíz. También puedes configurar padding="8dp" en RecyclerView , solo usa android:clipToPadding="false" .


Me lo imaginé. En mi situación particular, cada uno de mis fragmentos gestiona su propia instancia de la barra de herramientas. Estaba llamando a setSupportActionBar () en el método onViewCreated () en mis fragmentos. Mover esta funcionalidad en onCreateView () lo resolvió.

@Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_my_account, container, false); setupToolbar((Toolbar) view.findViewById(R.id.toolbar)); return view; } private void setupToolbar(Toolbar toolbar) { toolbarController.registerToolbar(toolbar); toolbarController.setActivityTitle("My Account"); }

(registerToolbar () llama a setSupportActionBar () dentro de la actividad de alojamiento).

Espero que esto ayude a todos!


Simplemente agregando margen inferior a View Pager arréglalo.

Aquí está el código en mi activity_main.xml

<android.support.v4.view.ViewPager android:id="@+id/main_viewPager" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginBottom="55dp"/> <android.support.design.widget.BottomNavigationView android:id="@+id/navigation" android:layout_width="0dp" android:layout_height="wrap_content" android:background="?android:attr/windowBackground" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintHorizontal_bias="0.0" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:menu="@menu/navigation" />


Vaya a style.xml y elimine estos dos elementos, o establezca sus valores "verdaderos" en "falso".

<item name="android:windowTranslucentStatus">true</item> <item name="android:windowTranslucentNavigation">true</item>

En mi caso, el problema se resolvió eliminando estos dos valores de estilos de tema.


intenta reemplazar tu dependencia de gradle

com.android.support:recyclerview-v7:22.0.+

con

com.android.support:recyclerview-v7:22.2.0

o

com.android.support:recyclerview-v7:+

(No estoy seguro de que esta sea la notación correcta)