2011-08-17 5 views
3

J'ai un problème d'interface utilisateur Android que je ne suis pas sûr de savoir comment résoudre. J'ai un tabhost avec quelques éléments différents dessus. Dans un cas, les champs ajoutés à un scrollView (qui est sur l'un des onglets) seront ajoutés dynamiquement. J'ai un bouton en bas de l'écran, en utilisant une disposition relative. Le problème est que le scrollview (et la disposition linéaire de l'autre onglet) s'étend au-delà du bouton du bas. Il en résulte que le champ final sur l'écran ne peut pas être visualisé, car il est masqué par le bouton. Voici une capture d'écran du problème ainsi que le fichier XML pour mes mises en page. Toute aide est grandement appréciée. enter image description hereMise en page relative sur un TabHost?

La mise en page principale:

<?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" 
    android:background="@drawable/background_nologo" > 

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

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

<View android:layout_width="fill_parent" 
    android:layout_height="2dip"/> 

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

<include layout="@layout/mc_message_send_tab_details"/> 

<!-- Scrollview for message data --> 
<ScrollView android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:scrollbars="vertical" 
    android:id="@+id/formTab"> 

<!-- Form fields are automatically 
    created in McMessageViewActivity. --> 
<LinearLayout android:id="@+id/formLayout" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:orientation="vertical" > 

    <View android:layout_width="fill_parent" 
    android:layout_height="5dip"/> 

</LinearLayout> 
</ScrollView> 

</FrameLayout> 

</LinearLayout> 

<RelativeLayout android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent">  
<LinearLayout android:layout_height="wrap_content" 
    android:layout_width="fill_parent" 
    android:layout_alignParentBottom="true" > 
    <Button android:text="Send" 
     android:id="@+id/btnSend" android:layout_weight="1" 
     android:layout_height="wrap_content" android:layout_width="0px"/> 
</LinearLayout> 
</RelativeLayout> 

</TabHost> 

La disposition des onglets supplémentaires:

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

    <TableLayout android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:stretchColumns="1"> 

     <View android:layout_width="fill_parent" 
      android:layout_height="10dip"/> 

     <TableRow> 
      <TextView 
       android:text="Unit #" 
       android:textStyle="bold" 
       android:gravity="right" 
       android:padding="3dip" /> 
      <Spinner android:id="@+id/unitNumber" 
       android:text="" 
       android:padding="3dip" 
       android:layout_marginRight="2sp"/> 
     </TableRow> 
     <TableRow> 
      <TextView 
       android:text="User ID" 
       android:textStyle="bold" 
       android:gravity="right" 
       android:padding="3dip" /> 
      <EditText android:id="@+id/userId" 
       android:text="" 
       android:padding="3dip" 
       android:layout_marginRight="2sp" /> 
     </TableRow> 
     <TableRow> 
      <TextView 
       android:text="Form #" 
       android:textStyle="bold" 
       android:gravity="right" 
       android:padding="3dip" /> 
      <Spinner android:id="@+id/formNumber" 
       android:text="" 
       android:padding="3dip" 
       android:layout_marginRight="2sp" /> 
     </TableRow> 
     <TableRow> 
      <TextView 
       android:text="Sending status" 
       android:textStyle="bold" 
       android:gravity="right" 
       android:padding="3dip" /> 
      <EditText android:id="@+id/sendingStatus" 
       android:text="" 
       android:padding="3dip" 
       android:layout_marginRight="2sp"/> 
     </TableRow> 
     <TableRow> 
      <TextView 
       android:text="Delivery priority" 
       android:textStyle="bold" 
       android:gravity="right" 
       android:padding="3dip" /> 
      <EditText android:id="@+id/priority" 
       android:text="" 
       android:padding="3dip" 
       android:layout_marginRight="2sp"/> 
     </TableRow> 
     <TableRow> 
      <TextView 
       android:text="Request reply" 
       android:textStyle="bold" 
       android:gravity="right" 
       android:padding="3dip" /> 
      <CheckBox android:id="@+id/requestReply" 
       android:padding="3dip" 
       android:layout_marginRight="2sp" /> 
     </TableRow> 
     <TableRow> 
      <TextView 
       android:text="Receipt conf" 
       android:textStyle="bold" 
       android:gravity="right" 
       android:padding="3dip" /> 
      <CheckBox android:id="@+id/receiptConfirmation" 
       android:padding="3dip" 
       android:layout_marginRight="2sp" /> 
     </TableRow> 

    </TableLayout> 

</LinearLayout> 

Répondre

7

Votre principal problème est dû au fait que TabHost étend FrameLayout. C'est pourquoi vous avez utilisé le dernier RelativeLayout sur la mise en page principale. Vous avez essayé de tricher et vous avez perdu ... :)

Ce que vous avez à faire est de mettre une vue unique (par exemple un RelativeLayout) dans le TabHost, puis placez toutes les autres vues à l'intérieur.

Quelque chose comme ce qui suit (je devais supprimer certains <includes /> et arrière-plan pour le faire fonctionner sur mon ordinateur):

<?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" 
     android:padding="5dp"> 
     <TabWidget 
      android:id="@android:id/tabs" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:layout_alignParentTop="true" /> 
     <View 
      android:id="@+id/separator" 
      android:layout_below="@android:id/tabs" 
      android:layout_width="fill_parent" 
      android:layout_height="2dip" /> 
     <FrameLayout 
      android:id="@android:id/tabcontent" 
      android:layout_below="@+id/separator" 
      android:layout_above="@+id/btnSend" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent"> 
      <!-- Scrollview for message data --> 
      <ScrollView 
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent" 
       android:scrollbars="vertical" 
       android:id="@+id/formTab"> 
       <!-- 
        Form fields are automatically created in 
        McMessageViewActivity. 
       --> 
       <LinearLayout 
        android:id="@+id/formLayout" 
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content" 
        android:orientation="vertical"> 
        <View 
         android:layout_width="fill_parent" 
         android:layout_height="5dip" /> 
       </LinearLayout> 
      </ScrollView> 
     </FrameLayout> 
     <!-- Unnecessary  <LinearLayout--> 
     <!--   android:layout_height="wrap_content"--> 
     <!--   android:layout_width="fill_parent"--> 
     <!--   android:layout_alignParentBottom="true">--> 
     <Button 
      android:layout_alignParentBottom="true" 
      android:text="Send" 
      android:id="@+id/btnSend" 
      android:layout_weight="1" 
      android:layout_height="wrap_content" 
      android:layout_width="fill_parent" /> 
     <!--  </LinearLayout>--> 
    </RelativeLayout> 
</TabHost> 
+0

Vous venez est devenu mon héros. Je vous remercie! –

+0

Il y a une faute de frappe à la ligne 17. – Javide

+0

@javid: Correction, merci :) – OcuS

Questions connexes