2010-03-07 19 views
146

He visto algo de charla sobre esto, pero nada definitivo. ¿Hay alguna manera de colocar las pestañas en un TabWidget en la parte inferior de la pantalla? Si es así, ¿cómo?Android: pestañas en la parte INFERIOR

He intentado lo siguiente, pero no funcionó:

a) establecer el TabWidget por debajo de la FrameLayout
b) establecer la gravedad de la TabWidget a "inferior"

Gracias! llappall

+10

favor definir "no funcionó". – CommonsWare

+3

[Mirar aquí] (http://stackoverflow.com/a/6992662/593709) si quieres iPhone como hosts de pestañas. –

+0

Yo uso uno del siguiente sitio. está funcionando [http://kpbird.blogspot.com/2011/05/androidbottom-tabbar-control.html](http://kpbird.blogspot.com/2011/05/androidbottom-tabbar-control.html) – Juliousraj

Respuesta

1

Esto puede no ser 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 quisiera señalarle :

ScrollableTabHost está diseñado para comportarse como TabHost, pero con un ScrollView adicional compatible con más artículos ...

tal vez la excavación en este proyecto de código abierto encontrará una respuesta a su pregunta. Si veo algo más fácil, volveré contigo.

1

Sí, ver: link, pero usó diseños de XML, no de actividades para crear una nueva pestaña, por lo que puso su código XML (paddingTop conjunto de FrameLayout - 0 px) y luego escribir 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);  


} 

}

269

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

  1. En su LinearLayout vertical, poner el FrameLayout por encima de la TabWidget
  2. Establecer layout_height a wrap_content tanto FrameLayout y TabWidget
  3. de Set FrameLayout android:layout_weight="1"
  4. Conjunto de android:layout_weight="0" (0 es por defecto, pero para dar énfasis TabWidget, legibilidad, etc.)
  5. Establecer TabWidget's android:layout_marginBottom="-4dp" (para quitar 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> 
+3

El divisor está realmente codificado. Intenté cambiar los artilugios usados ​​para las pestañas y lo encontré. Total decepción. –

+0

¿De verdad encontraste dónde está codificado en el widget, y NO hay interfaz para cambiarlo? Sorprendente y decepcionante. Por lo tanto, actualmente la única solución es dibujar manualmente un divisor sobre él y mantener la línea debajo de las pestañas ... – stormin986

+0

Mi enfoque es un realineamiento simple de las pestañas en la parte inferior.Para un TabWidget personalizado con esta y otras características, parece que este tipo hizo una que admite la alineación vertical de pestañas, así como algunas otras personalizaciones como fondos/iconos de pestañas. – stormin986

37

Pruébelo;) Sólo ver el contenido de la FrameLayout (@ id/tabcontent), porque no sé cómo se va a manejar en caso de desplazamiento ... En mi caso, funciona porque utilicé ListView como el contenido de mis pestañas. :) Espero que 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> 
+4

+1 ¿Pero notó la barra negra/gris en la parte superior de la pantalla? ¿Cómo lo eliminaste? –

+0

Estoy usando esto para publicar el widget de pestañas en el lado izquierdo del formulario. –

1

que estaba teniendo el mismo problema con pestañas androide cuando se trata de colocarlos en la parte inferior de la pantalla.Mi caso era no usar un archivo de diseño y crear las pestañas en el código, también buscaba activar actividades de cada pestaña que parecían demasiado complejas usando otros enfoques, así que aquí está el código de muestra para resolver el problema:

adding-tabs-in-android-and-placing-them

+1

No publicar el código aquí hace que su respuesta sea incompleta. – BryanH

3

Para todos aquellos que intenten eliminar la línea de separación del tabWidget, aquí hay un proyecto de ejemplo (y su respectivo tutorial), que funcionan muy bien para personalizar las pestañas y 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.

3

No estoy seguro si va a trabajar para todas las versiones de Android (especialmente aquellos con cosas interfaz de usuario personalizada), pero yo era capaz de eliminar la barra gris en la parte inferior mediante la adición de

android:layout_marginBottom="-3dp" 

al XML TabWidget. ..

3

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

  1. Usando disposición relativa
  2. Usando atributo layout_weight

Por favor, compruebe el link for more details.

+1

¡muy fácil y al grano !, ¡gracias! – MaKo

10

Hay una manera de eliminar la línea.

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

2) A continuación, aplicar el cambio RelativeLayout que Leaudro sugirió anteriormente (aplicar los puntales de diseño a todos FrameLayouts).

También puede agregar un ImageView a la pestaña.xml en el elemento n. ° 1 y obtener un aspecto similar 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 por hacer, principalmente hacer un selector para los iconos y asegurar una distribución horizontal igual, pero se entiende la idea. En mi caso, estoy usando fragmentos, pero los mismos principios deberían aplicarse a una vista de pestaña estándar.

enter image description here

+0

Ha pasado un tiempo desde que publicó esto, pero su enlace ahora dice __ Bienvenido a nginx! __ y nada más está allí en la página. – DroidDev

+0

No fue mi sitio, por lo que no tengo control sobre él lamentablemente. Sin embargo, después de este período de tiempo, los sistemas han cambiado lo suficiente como para no implementar este tipo de interfaz para los usuarios de Android. Esperarían que las cosas funcionen de manera diferente ahora. –

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> 
Cuestiones relacionadas