tabhost studio example android tabs android-fragments android-tabhost relativelayout

example - tabhost android studio



TABS Android con fragmentos (2)

He estado trabajando en un proyecto pequeño que consiste en una GUI con varias pestañas. Soy bastante nuevo con el concepto de fragmentos, sin embargo, parece que son una mejor práctica dentro del panorama de pestañas de Android. Logré codificar una aplicación de pestañas simple, que alterna entre 3 pestañas.

El único problema que tengo es cuando trato de colocar las pestañas en la parte inferior de la pantalla. Cuando están en la parte inferior, el widget de pestañas cubre el contenedor (framelayout en este caso) y, por lo tanto, no ocurre nada, la pantalla permanece igual al hacer clic en las distintas pestañas.

El siguiente diseño XML representa la versión correcta (donde las pestañas se encuentran en la parte superior de la pantalla):

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <TabHost android:id="@android:id/tabhost" android:layout_width="fill_parent" android:layout_height="fill_parent" > <LinearLayout android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TabWidget android:id="@android:id/tabs" android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="0" /> <FrameLayout android:id="@android:id/tabcontent" android:layout_width="0dp" android:layout_height="0dp" android:layout_weight="0"/> <FrameLayout android:id="@+android:id/realtabcontent" android:layout_width="fill_parent" android:layout_height="0dp" android:layout_weight="1"/> </LinearLayout> </TabHost> </LinearLayout>

El siguiente diseño XML representa la versión que no funciona, cuando las pestañas están en la parte inferior de la pantalla:

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <TabHost android:id="@android:id/tabhost" android:layout_width="fill_parent" android:layout_height="fill_parent" > <RelativeLayout android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TabWidget android:id="@android:id/tabs" android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" /> <FrameLayout android:id="@android:id/tabcontent" android:layout_width="0dp" android:layout_height="0dp" /> <FrameLayout android:id="@+android:id/realtabcontent" android:layout_width="fill_parent" android:layout_height="0dp" /> </RelativeLayout> </TabHost> </LinearLayout>

Cambié el layour a relativelayout y agregué este comando: android: layout_alignParentBottom = "true" al tabwidget. ¿Alguien tiene una idea alternativa de cómo puedo solucionar este problema? Gracias por adelantado.


En general, usar pestañas en la parte inferior de la pantalla es una mala solución (vea las pautas de diseño de Android ).

Para su solución: coloque TabWidget al final de la lista de vistas. Debido a que el dibujo es un proceso de línea y los fragmentos de este su caso se ahogó superior TabWidget


Puede usar peso en su lugar. Pruebe esta marca de diseño

<android.support.v4.app.FragmentTabHost xmlns:android="http://schemas.android.com/apk/res/android" android:id="@android:id/tabhost" android:layout_width="match_parent" android:layout_height="match_parent" > <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <FrameLayout android:id="@android:id/tabcontent" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" /> <TabWidget android:id="@android:id/tabs" android:layout_width="match_parent" android:layout_height="wrap_content" /> </LinearLayout> </android.support.v4.app.FragmentTabHost>

Puede reemplazar FragmentTabHost con la propia clase TabHost. Entonces, tus pestañas estarán en la parte inferior de la pantalla. Tenga cuidado con los pesos anidados (son malos para el rendimiento) y la jerarquía de vista profunda (especialmente para android <4).