2011-08-17 72 views
3

我有一個Android用戶界面問題,我不太清楚如何解決。我有一個帶有幾個不同項目的tabhost。在一種情況下,添加到scrollView(位於其中一個選項卡上)的字段將被動態添加。我有一個按鈕在屏幕的底部,使用相對佈局。問題是滾動視圖(和其他選項卡的線性佈局)超出底部按鈕。這會導致屏幕上的最終字段不可查看,因爲它被按鈕隱藏。這是該問題的屏幕截圖以及我的佈局的xml。任何幫助是極大的讚賞。 enter image description hereTabHost上的相對佈局?

主要佈局:

<?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> 

附加標籤佈局:

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

回答

7

你的主要問題是由於TabHost延伸的FrameLayout的事實。這就是爲什麼你使用主佈局上的最後一個RelativeLayout。你試圖欺騙,你失去了...... :)

你必須做的是把一個獨特的視圖(例如一個RelativeLayout)放入到TabHost中,然後放入其他所有視圖。

像下面這樣(我不得不刪除一些<includes />和背景得到它在我的電腦上工作):

<?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

你剛剛成爲我心目中的英雄。謝謝! –

+0

第17行有一個錯字。 – Javide

+0

@javid:已修復,謝謝:) – OcuS