the - navigation with fragments android
Parte del fragmento dentro de ViewPager que se corta en la parte inferior de la pantalla(Android) (5)
He definido un diseño básico de Coordinador para mi vista:
<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.design.widget.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:layout_scrollFlags="scroll|enterAlways"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />
<android.support.design.widget.TabLayout
android:id="@+id/tabs"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:tabIndicatorColor="@color/white"
app:tabMode="fixed"/>
</android.support.design.widget.AppBarLayout>
<android.support.v4.view.ViewPager
android: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.CoordinatorLayout>
Hay varias pestañas en mi vista paginador. Estoy publicando uno de mis fragmentos simples:
<ListView
android:id="@+id/transferList"
android:layout_width="match_parent"
android:layout_height="match_parent"></ListView>
<android.support.design.widget.FloatingActionButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_marginBottom="@dimen/activity_vertical_margin"
android:layout_marginRight="@dimen/activity_horizontal_margin"
android:layout_alignParentRight="true"
android:src="@drawable/ic_add_white" />
Lo que pasa es que la FAB sale de pantalla. Simplemente no es el FAB, pero otros fragmentos con vistas de cartas / listas se cortan en la parte inferior de la pantalla. Busqué una solución y encontré una solución intrincada: eliminar la aplicación de la propiedad: layout_scrollFlags = "scroll | enterAlways" de la barra de herramientas .
No puedo entender qué podría estar causando esto, y cómo eliminar el problema anterior resolvió el problema. ¿Es algún error en la biblioteca de soporte? ¿Hay una mejor manera de resolver esto? Otra solución que encontré es desde here : mantener el botón FAB directamente bajo un diseño de Coordinador en la actividad, y hacerlo visible solo en el fragmento que necesita. No me pareció una buena solución. Además, otras vistas en mis fragmentos también fueron cortadas.
Elimine el desplazamiento del atributo layout_scrollFlags de la barra de herramientas. Deberías tener algo como esto: app:layout_scrollFlags="enterAlways|enterAlwaysCollapsed"
Esto se debe a que está utilizando CoordinatorLayout
con ListView
. Puede cambiar su implementación a RecyclerView
para lograr un desplazamiento correcto.
Revisa mi respuesta here . Esto puede ayudarte.
Hay 2 soluciones a este problema:
- Puede eliminar el
scroll
la barra de herramientas de laapp:layout_scrollFlags
(por ejemplo,app:layout_scrollFlags="enterAlways"
) o eliminar laapp:layout_scrollFlags
completaapp:layout_scrollFlags
- Si necesita el atributo de
scroll
, el contenido / fragmento del diseño principal debe usarRecyclerView
oNestedScrollView
.
https://code.luasoftware.com/tutorials/android/bottom-of-fragment-in-viewpager-out-of-screen/
He solucionado este problema cambiando el atributo de la barra de herramientas app:layout_scrollFlags="scroll|enterAlways"
a solo app:layout_scrollFlags="enterAlways"
.
Tengo un diseño similar al tuyo: actividad con una barra de herramientas que sale de la parte superior y pestañas. Y el requisito para los fragmentos es tener sus propios FAB independientes.
No pude manejarlo directamente en el xml, entonces lo clavé de esa manera:
Diseño de la actividad
<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:fitsSystemWindows="true">
<android.support.design.widget.AppBarLayout
android:id="@+id/appbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fitsSystemWindows="true"
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:layout_marginBottom="20dp"
android:background="?attr/colorPrimary"
app:layout_scrollFlags="scroll|enterAlways|snap"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />
<android.support.design.widget.TabLayout
android:id="@+id/tabs"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:tabContentStart="72dp"
app:tabMode="scrollable" />
</android.support.design.widget.AppBarLayout>
<android.support.v4.view.ViewPager
android:id="@+id/viewpager"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
Disposición del fragmento:
<FrameLayout 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">
<include
android:id="@+id/scroll"
layout="@layout/content_activity_main"
android:layout_width="match_parent"
android:layout_height="wrap_content"
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|right|end"
android:src="@android:drawable/ic_input_add"
app:borderWidth="0dp"
app:fabSize="mini"
app:useCompatPadding="true" />
Y un poco de código para que la FAB se quede donde debía estar. Fragmento onCreateView:
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
final View rootView = inflater.inflate(R.layout.fragment_tabs2, container, false);
final FloatingActionButton fab = (FloatingActionButton) rootView.findViewById(R.id.fab);
final TabLayout tabLayout = (TabLayout) getActivity().findViewById(R.id.tabs);
final AppBarLayout appBarLayout = (AppBarLayout) getActivity().findViewById(R.id.appbar);
appBarLayout.addOnOffsetChangedListener(new AppBarLayout.OnOffsetChangedListener() {
@Override
public void onOffsetChanged(AppBarLayout appBarLayout, int verticalOffset) {
int maxAbsOffset = appBarLayout.getMeasuredHeight() - tabLayout.getMeasuredHeight();
fab.setTranslationY(-maxAbsOffset - verticalOffset);
}
});
return rootView;
}