2011-09-11 121 views
0

計算選項卡寬度時不填充整個屏幕我有含有TabHost水平ScrollView內五個標籤。我希望所有標籤都具有相同尺寸,最小尺寸爲83dp。如果第五個選項卡適合屏幕顯示,則所有選項卡都會變寬以填充整個屏幕。以下是實現此目的的代碼:TabHost根據屏幕寬度

int tabMinWidth = (int) (83 * density); 
int tabWidth = tabMinWidth 
int nrOfTabs = displayMetrics.widthPixels/tabMinWidth; 
if (nrOfTabs > 4) 
    tabWidth = displayMetrics.widthPixels/5; 
for(int i = 0; i < 5; i++) 
    tabHost.getTabWidget().getChildAt(i).getLayoutParams().width = tabWidth; 

基本上代碼工作正常。但是,選項卡並未使用整個屏幕寬度。例如:五個選項卡與96PX不填充屏幕分辨率320x480在橫向模式下(約20像素的未使用的空間),雖然96×5正好是480我如何才能提高代碼,使標籤確實填滿整個屏幕?

UPDATE: 解決方案:我發現了約4-5%調整每個選項卡工作得很好:

tabWidth = (int) (tabWidth *1.04); 

更新2: 我想我找到原因問題。這些選項卡具有負右側和左側邊距。考慮到這些利潤率可以解決問題,並且TabHost恰好填滿整個屏幕。

+0

是標籤按鈕之間有差距?這可能是20px – blessenm

+0

是的,這些標籤之間存在細微差距,但我懷疑它們是未使用空間的原因。它們應該使TabHost變得更寬(寬度+間隙)而不是太小。我現在通過將tabWidth乘以1.04來解決問題。但是,這只是一個近似值,仍然需要改進。 – crnv

回答

0

也許使用按鈕將工作。

當我使用的標籤,我通常只是隱藏設置的Android能見度不見了tabwidget標籤。

按鈕並將其添加到充當標籤按鈕像

<?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">   
     <FrameLayout android:id="@android:id/tabcontent" 
      android:layout_width="fill_parent" android:layout_height="0dip" 
      android:layout_weight="1.0"/> 
     <FrameLayout android:layout_width="fill_parent" 
      android:layout_height="wrap_content"> 
      <TabWidget android:id="@android:id/tabs" android:layout_width="fill_parent" 
       android:layout_height="wrap_content" 
       android:visibility="gone"/> 
      <LinearLayout android:layout_width="fill_parent" 
       android:layout_height="64dip"> 
       <Button android:layout_height="fill_parent" android:layout_width="0dip" 
        android:layout_weight="1.0" 
        android:background="@drawable/ic_tab_artists" 
        android:id="@+id/artist_id" android:onClick="tabHandler"/> 
       <Button android:layout_height="fill_parent" android:layout_width="0dip" 
        android:layout_weight="1.0" 
        android:background="@drawable/ic_tab_artists" 
        android:id="@+id/album_id" android:onClick="tabHandler"/> 
      </LinearLayout> 
     </FrameLayout> 
    </LinearLayout> 
</TabHost> 

,我添加一個按鈕單擊處理

public void tabHandler(View target){ 
    artistButton.setSelected(false); 
    albumButton.setSelected(false); 
    songButton.setSelected(false); 
    if(target.getId() == R.id.artist_id){ 
     tabHost.setCurrentTab(0); 
     artistButton.setSelected(true); 
    } else if(target.getId() == R.id.album_id){ 
     tabHost.setCurrentTab(1); 
     albumButton.setSelected(true); 
    } 
} 

這使得它更容易自定義標籤按鈕。你將需要嘗試一下,因爲我還沒有真正嘗試過horizo​​ntalscrollview中的選項卡。

+0

謝謝你的回答。但是,我不想自己處理這些標籤。它只是爲了我的目的矯枉過正。我將使用上述的近似值。 – crnv

1

您可以設置水平滾動條的android:fillViewport="true"