Android: pestañas en la parte inferior

148

He visto algunas conversaciones sobre esto, pero nada definitivo. ¿Hay alguna manera de poner las pestañas en un TabWidget en la parte inferior de la pantalla? ¿Si es así, cómo?

He intentado lo siguiente, pero no funcionó:

a) establecer el tabulador debajo de la distribución de cuadros
b) configurar la gravedad del tabulador en "abajo"

¡Gracias! llappall

llappall
fuente
10
Defina "no funcionó".
CommonsWare
Yo uso uno del siguiente sitio. está funcionando http://kpbird.blogspot.com/2011/05/androidbottom-tabbar-control.html
Juliousraj
3
Mira aquí si quieres iPhone como host de pestañas.
Adil Soomro

Respuestas:

272

Aquí está la solución más simple, robusta y escalable para obtener pestañas en la parte inferior de la pantalla.

  1. En su LinearLayout vertical, coloque FrameLayout encima del TabWidget
  2. Establecer layout_heighta wrap_contenttanto FrameLayout y TabWidget
  3. Establecer FrameLayout's android:layout_weight="1"
  4. Establezca TabWidget's android:layout_weight="0"(0 es el valor predeterminado, pero para énfasis, legibilidad, etc.)
  5. Establecer TabWidget's android:layout_marginBottom="-4dp"(para eliminar el divisor inferior)

Código completo:

<?xml version="1.0" encoding="utf-8"?>
<TabHost xmlns:android="http://schemas.android.com/apk/res/android"
    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"
        android:padding="5dp">

        <FrameLayout
            android:id="@android:id/tabcontent"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:padding="5dp"
            android:layout_weight="1"/>

        <TabWidget
            android:id="@android:id/tabs"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="0"
            android:layout_marginBottom="-4dp"/>

    </LinearLayout>

</TabHost>
stormin986
fuente
3
El divisor está realmente codificado. Estaba tratando de cambiar los elementos dibujables utilizados para las pestañas y lo encontré. Es un fastidio total.
Jeremy Logan
66
Debe seleccionar esto (o algo) como la respuesta aceptada.
JediPotPie
44
La única desviación requerida aquí del ejemplo estándar de TabWidget de Google es la configuración layout_weight=1en FrameLayout. Esto permite que el control de pestaña "reclame" primero su altura fuera de LinearLayout.
Nick Farina
19
Para deshacerse del divisor en la parte inferior del TabWidget, simplemente agregue android:layout_marginBottom="-5px"al TabWidget. Esto moverá el TabWidget de la parte inferior de la pantalla 5 píxeles, lo suficiente para que no vea el divisor. FrameLayout compensará el tamaño para que funcione perfectamente. No estoy seguro de si el tamaño del divisor cambia en dispositivos más grandes o no. Puede que tenga que usar en dplugar de px.
Jake Wilson
1
He incorporado el comentario remove-divisor en la respuesta.
Arne Evertsson
38

Pruébelo;) Solo mire el contenido de FrameLayout (@ id / tabcontent), porque no sé cómo se manejará en caso de desplazamiento ... En mi caso, funciona porque utilicé ListView como contenido de mis pestañas . :) Espero eso ayude.

<?xml version="1.0" encoding="utf-8"?>
<TabHost xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@android:id/tabhost"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <RelativeLayout 
        android:layout_width="fill_parent" 
        android:layout_height="fill_parent">
        <FrameLayout android:id="@android:id/tabcontent"
             android:layout_width="fill_parent" 
             android:layout_height="fill_parent"
             android:layout_alignParentTop="true" 
             android:layout_above="@android:id/tabs" />
    <TabWidget android:id="@android:id/tabs"
             android:layout_width="fill_parent" 
             android:layout_height="wrap_content"
             android:layout_alignParentBottom="true" />
    </RelativeLayout>
</TabHost>
Leaudro
fuente
44
+1 ¿Pero notaste la barra negra / gris en la parte superior de la pantalla? ¿Cómo lo quitaste?
ahmet emrah el
Estoy usando esto para publicar el widget de pestaña en el lado izquierdo del formulario.
Sr.j05hua
12

Hay una manera de eliminar la línea.

1) Sigue este tutorial: android-tabs-with-fragments

2) Luego aplique el cambio RelativeLayout que Leaudro sugirió anteriormente (aplique los accesorios de diseño a todos los FrameLayouts).

También puede agregar un ImageView a tab.xml en el elemento n. ° 1 y obtener un aspecto muy parecido al iPhone en las pestañas.

Aquí hay una captura de pantalla de lo que estoy trabajando en este momento. Todavía tengo algo de trabajo que hacer, principalmente hacer un selector para los íconos y asegurar una distribución horizontal igual, pero entiendes la idea. En mi caso, estoy usando fragmentos, pero los mismos principios deberían aplicarse a una vista de pestaña estándar.

ingrese la descripción de la imagen aquí

Brill Pappin
fuente
Ha pasado un tiempo desde que publicó esto, pero su enlace ahora dice ¡ Bienvenido a nginx! y no hay nada más en la página.
DroidDev
1
No era mi sitio, desafortunadamente no tengo control sobre él. Sin embargo, después de este período de tiempo, los sistemas han cambiado lo suficiente como para que no deba implementar este tipo de interfaz para sus usuarios de Android, ahora esperarían que las cosas funcionen de manera un poco diferente.
Brill Pappin
3

No estoy seguro de si funcionará para todas las versiones de Android (especialmente aquellas con cosas de IU personalizadas), pero pude eliminar la barra gris en la parte inferior agregando

 android:layout_marginBottom="-3dp"

al TabWidget XML ...

Justin
fuente
3

Para todos aquellos de ustedes que intentan eliminar la línea de separación del tabWidget, aquí hay un proyecto de ejemplo (y su respectivo tutorial), que funciona muy bien para personalizar las pestañas y así eliminar problemas cuando las pestañas están en la parte inferior. Proyecto Eclipse: android-custom-tabs ; Explicación original: blog ; Espero que esto haya ayudado.

Djumaka
fuente
3

Hay dos formas de mostrar pestañas en la parte inferior de una actividad de pestañas.

  1. Usar diseño relativo
  2. Usando el atributo Layout_weight

Por favor, consulte el enlace para más detalles .

MduSenthil
fuente
3
<?xml version="1.0" encoding="utf-8"?>
<TabHost xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@android:id/tabhost"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="vertical" >

        <FrameLayout
            android:id="@android:id/tabcontent"
            android:layout_width="fill_parent"
            android:layout_height="0dip"
            android:layout_weight="1" />

        <TabWidget
            android:id="@android:id/tabs"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="0"
            android:background="#252a31"
            android:tabStripEnabled="false" >
        </TabWidget>
    </LinearLayout>

</TabHost>
Sanjay Mangaroliya
fuente
1

Puede que esto no sea exactamente lo que está buscando (no es una solución "fácil" para enviar sus pestañas a la parte inferior de la pantalla), pero es una solución alternativa interesante que me gustaría señalarle:

ScrollableTabHost está diseñado para comportarse como TabHost, pero con una vista de desplazamiento adicional para adaptarse a más elementos ...

quizás profundizando en este proyecto de código abierto encontrará una respuesta a su pregunta. Si veo algo más fácil, volveré contigo.

Hubert
fuente
1

Estaba teniendo el mismo problema con las pestañas de Android cuando intentaba colocarlas en la parte inferior de la pantalla. Mi escenario era no usar un archivo de diseño y crear las pestañas en el código, también estaba buscando disparar actividades desde cada pestaña que parecían demasiado complejas usando otros enfoques, así que aquí está el código de muestra para superar el problema:

agregar-pestañas-en-android-y-colocarlas

Zeeshan
fuente
1

Sí, vea: enlace , pero usó diseños xml, no actividades para crear una nueva pestaña, así que coloque su código xml (establezca paddingTop para FrameLayout - 0px) y luego escriba el código:

public class SomeActivity extends ActivityGroup {

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
  setContentView(R.layout.main);

    TabHost tab_host = (TabHost) findViewById(R.id.edit_item_tab_host); 

    tab_host.setup(this.getLocalActivityManager());

    TabSpec ts1 = tab_host.newTabSpec("TAB_DATE"); 
    ts1.setIndicator("tab1"); 
    ts1.setContent(new Intent(this, Registration.class)); 
    tab_host.addTab(ts1); 

    TabSpec ts2 = tab_host.newTabSpec("TAB_GEO"); 
    ts2.setIndicator("tab2"); 
    ts2.setContent(new Intent(this, Login.class)); 
    tab_host.addTab(ts2); 

    TabSpec ts3 = tab_host.newTabSpec("TAB_TEXT"); 
    ts3.setIndicator("tab3"); 
    ts3.setContent(new Intent(this, Registration.class)); 
    tab_host.addTab(ts3); 

    tab_host.setCurrentTab(0);      


}

}

Pavel
fuente