2011-09-11 21 views
0

TabHostは水平の内に5つのタブを含みますScrollView。私はすべてのタブが83dpの最小サイズで同じサイズを持つようにします。 5番目のタブが画面に収まると、すべてのタブが画面全体を埋めるように拡大されます。これを達成するためのコードは次のとおりです。TabHostは画面幅に応じてタブ幅を計算するときに画面全体を塗りつぶしません

基本的にコードは正常に動作します。ただし、画面幅全体がタブで使用されるわけではありません。例:96ピクセルの5つのタブは、ランドスケープモード(約20ピクセルの未使用スペース)で320×480の画面を塗りつぶすわけではありませんが、96×5は正確に480です。タブが本当に画面全体を埋めるようにコードを改善するにはどうすればよいですか?

UPDATE: ソリューション:私は約4〜5%の各タブのサイズを変更することは非常にうまく機能していることが見つかりました:

tabWidth = (int) (tabWidth *1.04); 

UPDATE 2: 私は原因を見つけたと思います問題。タブの左右の余白は負です。これらのマージンを考慮すると問題が解決し、TabHostは画面全体を正確に塗りつぶします。

+0

タブボタンの間にはギャップがありますか?それは20pxかもしれない – blessenm

+0

はい、タブの間に小さなギャップがありますが、私はそれらが使用されていないスペースの理由であるとは思わない。それらは、TabHostをより幅広く(幅+ギャップ)、小さすぎないようにすべきである。私は何とか 'tabWidth'に1.04を掛けて問題を解決しました。しかし、これは単なる近似であり、依然として改善が必要です。 – crnv

答えて

0

多分ボタンを使用すると機能します。

タブを使用すると、通常はアンドロイドの視認性をなくして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"を設定できます。

関連する問題