根据屏幕宽度计算标签宽度时,TabHost不会填满整个屏幕

时间:2011-09-11 08:14:25

标签: android android-tabhost

我的TabHost包含水平ScrollView内的五个标签。我希望所有标签都具有相同的尺寸,最小尺寸为83dp。如果第五个选项卡适合屏幕,则所有选项卡都会加宽以填满整个屏幕。以下是实现此目的的代码:

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屏幕(大约20px未使用的空间),尽管96 x 5正好是480.如何改进代码以使选项卡真正填满整个屏幕?

<击> 更新: 解决方案:我发现将每个标签的大小调整大约4-5%非常有效:

tabWidth = (int) (tabWidth *1.04);

<击>

更新2: 我想我找到了问题的原因。标签的左右边距为负。考虑到这些边距可以解决问题,TabHost可以完全填满整个屏幕。

2 个答案:

答案 0 :(得分:1)

您可以设置水平滚动条的android:fillViewport="true"

答案 1 :(得分: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中尝试过标签。