Android删除tabwidget中的标签之间的空间

我做了一个像HelloTabActivity一样的标签的应用程序,这些标签之间也有空格,任何人都可以build议如何删除这个空间,并且在标签下面还有一个灰色的线,那么如何删除?

在这里输入图像描述

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)); } } 

现在我想删除标签之间的黑色空间,它应该像他们连接,我也无法删除标签下面的灰线。

谢谢

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

 tabHost.getTabWidget().setStripEnabled(false); 

至于删除标签之间的差距..最好的办法是使用你自己的drawable没有任何填充。 你可以使用这个图像,或者你可以通过xml来创build你的标签的背景,比如在一个<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的背景。

要了解如何自定义选项卡,网上有很多教程。 比如乔希的这个短小,有一个很好的解释。

更新

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

自定义标签

你需要什么:

  1. 三个新的图层可绘制(对于选项卡的选定,关注和未选中状态)
  2. 两个状态drawable(用于不同状态的文本和背景)
  3. 标签的新布局
  4. 更新你的main.xml
  5. 更新你的活动类
  6. 更新你的androidManifest.xml(删除样式声明)

三层可绘制: tab_normal.xmltab_focused.xmltab_selected.xml
drawable / 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> 

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

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

两个状态drawable: tab_background_selector.xmltab_text_selector.xml
drawable / 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> 

drawable / 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的新布局: 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); } } 

这就是它。
要创build直angular标签,只需从图层的可绘制xml文件中丢失angular落规格。
也可以玩各种颜色,笔画等,使结果符合你的喜好。

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

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

如果您的构build目标是蜂窝向前,则可以使用以下代码。

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

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

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

一条魔术线

 mTabHost.getTabWidget().setDividerDrawable(null); 

完成