Android开发:如何在FragmentTabHost中设置标签分隔线?
给FragmentTabHost的标签添加分隔线解决方案
嘿,我完全懂你现在的烦恼——作为Android新手,想给FragmentTabHost的标签加分隔线,搜出来的方案全是TabLayout的,试了半天没效果对吧?别着急,我来帮你搞定这个问题,毕竟我也踩过类似的坑~
问题出在哪?
你之前的代码里遍历的是tabHost.getChildAt(i),但实际上承载所有标签的容器是TabWidget(也就是布局里@android:id/tabs对应的控件),你之前的操作根本没作用到正确的View上,所以分隔线自然不显示啦。
正确的实现步骤
直接替换你原来的for循环代码,用下面这段就行:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_search_flight); tabHost= (FragmentTabHost) findViewById(R.id.search_flight_tab_host); tabHost.setup(this, getSupportFragmentManager(),android.R.id.tabcontent); // 添加标签的代码保持不变 tabHost.addTab(tabHost.newTabSpec(Constants.SEARCH_FLIGHT_ROUND_TRIP).setIndicator(getString(R.string.round_trip)), SearchFlightRoundTripFragment.class, null); tabHost.addTab(tabHost.newTabSpec(Constants.SEARCH_FLIGHT_ONE_WAY).setIndicator(getString(R.string.one_way)), SearchFlightOneWayFragment.class, null); tabHost.addTab(tabHost.newTabSpec(Constants.SEARCH_FLIGHT_MULTIPLE).setIndicator(getString(R.string.multiple)), SearchFlightMultipleFragment.class, null); // --- 重点修改的部分 --- // 获取真正的标签容器TabWidget TabWidget tabWidget = tabHost.getTabWidget(); // TabWidget本身就是LinearLayout的子类,直接强转 LinearLayout tabContainer = (LinearLayout) tabWidget; // 开启中间位置的分隔线 tabContainer.setShowDividers(LinearLayout.SHOW_DIVIDER_MIDDLE); // 设置分隔线的Drawable Drawable divider = getDrawable(R.drawable.tab_divider); tabContainer.setDividerDrawable(divider); // 可选:设置分隔线的上下内边距,让它不贴满标签高度(和你的drawable效果一致) tabContainer.setDividerPadding(12); }
优化你的分隔线Drawable
你原来的layer-list其实可以简化,不需要两层,直接用一个shape加上padding就能实现上下留白的效果:
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <!-- 分隔线宽度 --> <size android:width="1dp" /> <!-- 分隔线颜色 --> <solid android:color="@color/colorBlack" /> <!-- 上下内边距,让分隔线不贴满标签的顶部和底部 --> <padding android:top="12dp" android:bottom="16dp" /> </shape>
额外注意点
- 确保你布局里的TabWidget的
android:orientation是horizontal(你已经设置了),这样分隔线是垂直方向的,符合标签栏的需求。 - 如果分隔线还是不显示,可以检查一下TabWidget的背景是否覆盖了分隔线,或者调整分隔线的颜色和宽度,让它更明显。
这样修改之后,你应该就能看到标签之间的垂直分隔线了,亲测有效哦~
内容的提问来源于stack exchange,提问作者Juan Pablo Moreno Martín
相关产品推荐
相关产品推荐

