Android删除tabwidget中选项卡之间的空格

时间:2011-04-27 04:22:59

标签: android android-layout android-tabhost tabwidget android-style-tabhost

我创建了一个应用程序,其中包含HelloTabActivity中的标签,这些标签之间也有空格,任何人都可以建议如何删除此空间,并且标签下方还有一条灰色线条如何删除?

enter image description here

main.xml中

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TabHost
    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"
        android:padding="5dp" >
        <HorizontalScrollView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:scrollbars="none">
            <TabWidget
                android:id="@android:id/tabs"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content" />
        </HorizontalScrollView>
        <FrameLayout
            android:id="@android:id/tabcontent"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:padding="5dp" />
    </LinearLayout>
</TabHost>
</LinearLayout>

styles.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="CustomTheme" parent="@android:style/Theme">
    <item name="android:tabWidgetStyle">@style/CustomTabWidget</item>
</style>
<style name="CustomTabWidget" parent="@android:style/Widget.TabWidget">
    <item name="android:textAppearance">@style/CustomTabWidgetText</item>
</style>
<style name="CustomTabWidgetText" 
    parent="@android:style/TextAppearance.Widget.TabWidget">
    <item name="android:textSize">10sp</item>
    <item name="android:textStyle">bold</item>
    <item name="android:textColor">#1589FF</item>
    <item name="android:padding">3dip</item>
</style>


</resources>

活动

public class InfralineTabWidget extends TabActivity{

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    Resources res = getResources(); // Resource object to get Drawables
    TabHost tabHost = (TabHost)getTabHost();  // The activity TabHost

    TabHost.TabSpec spec;  // Resusable TabSpec for each tab
    Intent intent;  // Reusable Intent for each tab

    // Create an Intent to launch an Activity for the tab (to be reused)
    intent = new Intent().setClass(this, TopNewsActivity.class);

    // Initialize a TabSpec for each tab and add it to the TabHost
    spec = tabHost.newTabSpec("topNews").setIndicator("Top News", res.getDrawable(R.drawable.tab_news)).setContent(intent);
    tabHost.addTab(spec);

    // Do the same for the other tabs
    intent = new Intent().setClass(this, PowerActivity.class);
    spec = tabHost.newTabSpec("power").setIndicator("Power", res.getDrawable(R.drawable.tab_power)).setContent(intent);
    tabHost.addTab(spec);

    intent = new Intent().setClass(this, EnergyActivity.class);
    spec = tabHost.newTabSpec("energy").setIndicator("Renewable Energy", res.getDrawable(R.drawable.tab_energy)).setContent(intent);
    tabHost.addTab(spec);

    intent = new Intent().setClass(this, CoalActivity.class);
    spec = tabHost.newTabSpec("coal").setIndicator("Coal", res.getDrawable(R.drawable.tab_coal)).setContent(intent);
    tabHost.addTab(spec);

    intent = new Intent().setClass(this, OilnGasActivity.class);
    spec = tabHost.newTabSpec("oilnGas").setIndicator("Oil & Gas", res.getDrawable(R.drawable.tab_oilngas)).setContent(intent);
    tabHost.addTab(spec);

    tabHost.setCurrentTab(0);
    tabHost.getTabWidget().getChildAt(0).setLayoutParams(new LinearLayout.LayoutParams(100,25));
    tabHost.getTabWidget().getChildAt(1).setLayoutParams(new LinearLayout.LayoutParams(100,25));
    tabHost.getTabWidget().getChildAt(2).setLayoutParams(new LinearLayout.LayoutParams(100,25));
    tabHost.getTabWidget().getChildAt(3).setLayoutParams(new LinearLayout.LayoutParams(100,25));
    tabHost.getTabWidget().getChildAt(4).setLayoutParams(new LinearLayout.LayoutParams(100,25));



}



}

现在我想删除标签之间的黑色空格,它应该就像连接一样,而且我也无法删除标签下方的灰线。

由于

5 个答案:

答案 0 :(得分:61)

要删除标签栏底部的灰线,您可以设置

tabHost.getTabWidget().setStripEnabled(false);

除去标签之间的间隙..最好的方法是使用你自己的drawable没有任何填充。您可以使用图像,或者您可以通过xml创建标签的背景,例如在<layer_list>根元素内:

<layer_list>
    <item android:top="0dp" android:left="0dp" android:right="0dp" android:bottom="0dp">
        <shape android:shape="rectangle">
        [..]
        </shape>
    </item>
    [..]
</layer_list>

并将此drawable设置为TabWidget

的背景

要了解如何自定义标签页,网上有很多教程。例如this one by Josh很简短,有很好的解释。

<强>更新

在这里,我使用自定义选项卡(基于您的代码)共享一小部分tabwidget,以实现以下输出:

custom tabs

你需要什么:

  1. 三个新的图层drawables(for 选择,专注和未选择 标签的状态)
  2. 两个州的drawables(为文本 和背景的不同 状态)的
  3. 标签的新布局
  4. 更新您的main.xml
  5. 更新您的活动类
  6. 更新你的androidManifest.xml (删除样式声明)
  7. 三层drawable:tab_normal.xmltab_focused.xmltab_selected.xml
    抽拉/ tab_normal.xml

    <?xml version="1.0" encoding="utf-8"?>
    <layer-list xmlns:android="http://schemas.android.com/apk/res/android">
        <item>
            <shape android:shape="rectangle">
                <solid android:color="@color/default_back_color" />
            </shape>
        </item>
        <item android:top="2dp">
            <shape android:shape="rectangle">
                <gradient android:startColor="#AAAAAA" android:centerColor="#888888"
                    android:endColor="#666666" android:angle="90" />
                <corners android:bottomRightRadius="0dp"
                    android:bottomLeftRadius="0dp" android:topLeftRadius="10dp"
                    android:topRightRadius="10dp" />
            </shape>
        </item>
        <item android:top="4dp" android:left="1dp" android:right="1dp"
            android:bottom="0dp">
            <shape android:shape="rectangle">
                <solid android:color="@color/default_back_color" />
                <corners android:bottomRightRadius="0dp"
                    android:bottomLeftRadius="0dp" android:topLeftRadius="8dp"
                    android:topRightRadius="8dp" />
            </shape>
        </item>
    </layer-list>
    

    <强>抽拉/ tab_focused.xml

    <?xml version="1.0" encoding="utf-8"?>
    <layer-list xmlns:android="http://schemas.android.com/apk/res/android">
        <item>
            <shape android:shape="rectangle">
                <solid android:color="@color/default_back_color" />
            </shape>
        </item>
        <item android:top="2dp">
            <shape android:shape="rectangle">
                <gradient android:startColor="#AAAAAA" android:centerColor="#888888"
                    android:endColor="#666666" android:angle="90" />
                <corners android:bottomRightRadius="0dp"
                    android:bottomLeftRadius="0dp" android:topLeftRadius="10dp"
                    android:topRightRadius="10dp" />
            </shape>
        </item>
        <item android:top="4dp" android:left="1dp" android:right="1dp"
            android:bottom="0dp">
            <shape android:shape="rectangle">
                <gradient android:startColor="#8F8F8F" android:centerColor="#656565"
                    android:endColor="#3F3F3F" android:angle="90" />
                <corners android:bottomRightRadius="0dp"
                    android:bottomLeftRadius="0dp" android:topLeftRadius="8dp"
                    android:topRightRadius="8dp" />
            </shape>
        </item>
    </layer-list>
    

    <强>抽拉/ tab_selected.xml

    <?xml version="1.0" encoding="utf-8"?>
    <layer-list xmlns:android="http://schemas.android.com/apk/res/android">
        <item>
            <shape android:shape="rectangle">
                <solid android:color="@color/default_back_color" />
            </shape>
        </item>
        <item android:top="2dp">
            <shape android:shape="rectangle">
                <gradient android:startColor="#EEEEEE" android:centerColor="#CCCCCC"
                    android:endColor="#AAAAAA" android:angle="-90" />
                <corners android:bottomRightRadius="0dp"
                    android:bottomLeftRadius="0dp" android:topLeftRadius="10dp"
                    android:topRightRadius="10dp" />
            </shape>
        </item>
        <item android:top="4dp" android:left="1dp" android:right="1dp"
            android:bottom="0dp">
            <shape android:shape="rectangle">
                <gradient android:startColor="#EAEAEA" android:centerColor="#9F9F9F"
                    android:endColor="#696969" android:angle="90" />
                <corners android:bottomRightRadius="0dp"
                    android:bottomLeftRadius="0dp" android:topLeftRadius="8dp"
                    android:topRightRadius="8dp" />
            </shape>
        </item>
    </layer-list>
    

    两个州的抽奖:tab_background_selector.xmltab_text_selector.xml
    抽拉/ tab_background_selector.xml

    <?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
        <item android:state_selected="true" android:state_focused="false"
            android:state_pressed="false" android:drawable="@drawable/tab_selected"/>
        <item android:state_selected="false" android:state_focused="false"
            android:state_pressed="false" android:drawable="@drawable/tab_normal" />
        <item android:state_pressed="true" android:drawable="@drawable/tab_focused"/>
        <item android:state_focused="true" android:state_selected="true"
            android:state_pressed="false" android:drawable="@drawable/tab_selected"/>
    </selector>
    

    <强>抽拉/ tab_text_selector.xml

    <?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
        <item android:state_selected="true" android:color="#1589FF" />
        <item android:state_focused="true" android:color="#1589FF" />
        <item android:state_pressed="true" android:color="@android:color/white" />
        <item android:color="#F0F0F0" />
    </selector>
    

    标签的新布局:tab.xml
    布局/ tab.xml

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent" android:layout_height="fill_parent"
        android:background="@drawable/tab_background_selector" android:gravity="center"
        android:orientation="vertical" android:padding="5dp">
        <ImageView android:id="@+id/tab_icon" android:layout_width="30dp"
            android:layout_height="30dp" android:scaleType="fitCenter" />
        <TextView android:id="@+id/tab_text" android:layout_width="wrap_content"
            android:layout_height="wrap_content" android:singleLine="true"
            android:textStyle="bold" android:gravity="center_horizontal"
            android:textSize="10sp" android:padding="3dip" android:ellipsize="marquee"
            android:textColor="@drawable/tab_text_selector" />
    </LinearLayout>
    

    <强> main.xml中

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical" android:layout_width="fill_parent"
        android:layout_height="fill_parent">
        <TabHost 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">
                <HorizontalScrollView android:scrollbars="none"
                    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" />
                </HorizontalScrollView>
                <FrameLayout android:id="@android:id/tabcontent"
                    android:layout_width="fill_parent" android:layout_height="fill_parent"
                    android:padding="5dp" />
            </LinearLayout>
        </TabHost>
    </LinearLayout>
    

    <强> InfralineTabWidget.java

    public class InfralineTabWidget extends TabActivity
    {
        public void onCreate(Bundle savedInstanceState)
        {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            final TabHost tabHost = (TabHost) getTabHost();
    
            tabHost.addTab(createTab(TopNewsActivity.class, 
                    "topNews", "Top News", R.drawable.tab_news));
            tabHost.addTab(createTab(PowerActivity.class, 
                    "power", "Power", R.drawable.tab_power));
            tabHost.addTab(createTab(EnergyActivity.class, 
                    "energy", "Renewable Energy", R.drawable.tab_energy));
            tabHost.addTab(createTab(CoalActivity.class, 
                    "coal", "Coal", R.drawable.tab_coal));
            tabHost.addTab(createTab(OilnGasActivity.class, 
                    "oilnGas", "Oil & Gas", R.drawable.tab_oilngas));
    
            tabHost.setCurrentTab(0);
            tabHost.getTabWidget().getChildAt(0).getLayoutParams().width = 140;
            tabHost.getTabWidget().getChildAt(1).getLayoutParams().width = 140;
            tabHost.getTabWidget().getChildAt(2).getLayoutParams().width = 140;
            tabHost.getTabWidget().getChildAt(3).getLayoutParams().width = 140;
            tabHost.getTabWidget().getChildAt(4).getLayoutParams().width = 140;
        }
    
        private TabSpec createTab(final Class<?> intentClass, final String tag, 
                final String title, final int drawable)
        {
            final Intent intent = new Intent().setClass(this, intentClass);
    
            final View tab = LayoutInflater.from(getTabHost().getContext()).
                inflate(R.layout.tab, null);
            ((TextView)tab.findViewById(R.id.tab_text)).setText(title);
            ((ImageView)tab.findViewById(R.id.tab_icon)).setImageResource(drawable);
    
            return getTabHost().newTabSpec(tag).setIndicator(tab).setContent(intent);
        }
    }
    

    就是这样。
    要创建直角形标签,只需从图层可绘制xml文件中丢失角落规格 还可以围绕颜色,笔触等进行游戏,使结果符合您的喜好。

答案 1 :(得分:8)

在xml布局中使用android:showDividers =“none”。

<TabWidget
        android:id="@android:id/tabs"
        android:layout_width="fill_parent"
        android:showDividers="none"
        android:layout_height="wrap_content"/>

答案 2 :(得分:1)

如果您的构建目标是Honeycomb以后,您可以使用以下代码。

if (Integer.parseInt(Build.VERSION.SDK) >= Build.VERSION_CODES.HONEYCOMB) {
    tabHost.getTabWidget().setShowDividers(LinearLayout.SHOW_DIVIDER_NONE);
}

答案 3 :(得分:0)

要删除选项卡之间的多余空隙,可以将tabwidget上的measureWithLargestChild属性设置为false

<TabWidget
   android:id="@android:id/tabs"                    
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:measureWithLargestChild="false">
 </TabWidget>

答案 4 :(得分:0)

一条神奇的线条。

mTabHost.getTabWidget().setDividerDrawable(null);

完成