2010-06-13 16 views
5

Lo que estoy tratando de hacer es crear un diseño de la siguiente manera:problema con el diseño de la interfaz de usuario TabHost

 +--------+ 
Search |EditText| [Button] 
     +--------+ 

+---------+ 
|Tab 1 |---------+ 
|   |Tab 2 | 
|---------+---------+-----------------+ 
| ListView Item 1      | 
| ListView Item 2      | 
| ListView Item 3      | 
| ListView Item 4      | 
| ListView Item 5      | 
| ListView Item 6      | 
| ListView Item 7      | 
| ListView Item 8      | 
| ListView Item 9      | 
| ListView Item 10     | 
+-------------------------------------+  

Así que eso es un TextView diciendo 'Buscar', un EditarTexto y un botón.

A continuación, debajo de las pestañas - La pestaña 1 tiene un ListView, Tab 2 algunas otras cosas. Puedo obtener una configuración simple de TabHost con dos pestañas que funcionan bien, pero no puedo lograr que lo anterior se distribuya correctamente.

El problema es que se instala y funciona bien, solo que el diseño es incorrecto. Probé vistas pesadas, etc., pero no puedo hacer que las cosas se coloquen según el diagrama ASCII de arriba.

Crearía la interfaz de usuario en el diseñador de Eclipse y verificaría el XML, excepto que el diseñador no trabaja con TabHost. Y DroidDraw no parece saber acerca de TabHost.

Aquí está el XML:

<?xml version="1.0" encoding="utf-8"?> 

<TabHost xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@+id/TabHost" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent"> 

     <LinearLayout 
      android:id="@+id/LinearLayout01" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:orientation="vertical" 
      android:padding="5dp"> 

      <TextView android:id="@+id/SearchTextView" 
       android:text="Search" 
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent" 
       android:layout_weight="10"> 
      </TextView> 

      <EditText 
       android:text="@+id/SearchEditText" 
       android:id="@+id/SearchEditText" 
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent" 
       android:singleLine="true" 
       android:layout_weight="10"> 
      </EditText> 

      <TabWidget android:id="@android:id/tabs" 
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent" 
       android:layout_weight="10"/> 

      <FrameLayout android:id="@android:id/tabcontent" 
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent" 
       android:layout_weight="70"> 

       <LinearLayout android:id="@+id/Tab1ListLayout" 
        android:layout_width="fill_parent" 
        android:layout_height="fill_parent"> 
       </LinearLayout>  

       <Button android:id="@+id/tab2" 
        android:layout_width="fill_parent" 
        android:layout_height="fill_parent" 
        android:text="Tab 2 button"/> 

      </FrameLayout>  
     </LinearLayout> 
</TabHost> 

... y aquí está la Actividad:

public class tabtest extends Activity { 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     TabHost tabs = (TabHost)findViewById(R.id.TabHost); 
     tabs.setup(); 
     TabHost.TabSpec spec = tabs.newTabSpec("tag1"); 
     spec.setContent(R.id.Tab1ListLayout); 
     spec.setIndicator("Tab 1"); 
     tabs.addTab(spec); 
     spec=tabs.newTabSpec("tag2"); 
     spec.setContent(R.id.tab2); 
     spec.setIndicator("Tab 2"); 
     tabs.addTab(spec); 

     EditText et = (EditText)findViewById(R.id.SearchEditText); 
     et.setText("Some text."); 

    } 
+1

Publique el código en su pregunta para que otros puedan ver lo que ha hecho hasta ahora y dar respuestas basadas en él. – primpap

+0

No recomendaría el diseñador de Eclipse o AndroidDraw para diseñar pestañas. Mejor hacerlo manualmente en xml o en tu código. Como dijo primalpop, especifique cuál es exactamente su dificultad ("las pestañas funcionan bien pero no pueden hacer que lo anterior se ajuste correctamente"). ¿Se trata de cómo aplicar diferentes alturas/margen/relleno para tab1/2? –

+0

Mathias: mencioné Eclipse/DroidDraw en el sentido de que ni siquiera podía utilizarlos para comprobar el XML generado por lo que debería * verse *. –

Respuesta

2

Parece necesita revisar conceptos básicos tales "layout resources" y "declaring layout".

Ver layout tricks para el truco de diseño lineal "peso". Posible solución:

<?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"> 
     <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal"> 
      <TextView android:id="@+id/SearchTextView" 
       android:text="Search" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content"> 
      </TextView> 

      <EditText 
       android:text="@+id/SearchEditText" 
       android:id="@+id/SearchEditText" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:singleLine="true"> 
      </EditText> 

     </LinearLayout> 

     <TabWidget android:id="@android:id/tabs" android:layout_width="fill_parent" android:layout_height="wrap_content" /> 

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

      <Button android:id="@+id/tab2" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:text="Tab 2 button"/> 
    </LinearLayout> 
</TabHost> 
+0

OK gracias por su ayuda. –

+0

Era bastante obvio desde el Visor de jerarquía lo que estaba mal, no sabía acerca de esa herramienta. –

Cuestiones relacionadas