我使用 TabWidget 创建了一个带有片段的选项卡,每个选项卡都有自定义布局。除了一件事之外,一切似乎都正常工作并且看起来很好。在 ICS 及更高版本上,它如下所示:
但在 Gingerbread 上,它看起来像下面这样:
如您所见,姜饼中缺少分隔线。
所以我有两个问题。首先,无论如何我可以让分隔线出现在姜饼上吗?我已经尝试过有关 stackoverflow 的各种建议,但他们只是不想出现。
其次,是否有自定义分隔线的外观?我试过使用:
setDividerDrawable()
使用适用于 ICS 的图像,但我在 Gingerbread 中得到一个空指针异常。
(更新:关于加粗的问题,我刚刚发现了一些非常烦人的东西。似乎 Gingerbread 和 ICS+ 处理分隔符的方式不同。我在 TabWidget.getChildAt() 调用中遇到空指针异常。设置分隔符时,在Gingerbread 分隔线被认为是它包含的 Tabwidget 的子视图,但在 ICS+ 中它不是(或被忽略)。因此,我用于 getChildAt 的索引在 Gingerbread 中是完全错误的,因为 tabwidget 看到 5孩子(3 个标签和 2 个分隔符),但在 ICS 中它只看到 3 个(只有 3 个标签))
我也尝试设置分隔线的颜色,但它们似乎根本不起作用。
以下是选项卡的设置方式:
/**
* Setup the tab host.
*/
private void initialiseTabHost(Bundle args) {
this.tabHost = (TabHost) findViewById(android.R.id.tabhost);
this.tabHost.setup();
TabInfo tabInfo = null;
addTab( this,
this.tabHost,
this.tabHost.newTabSpec(TAB_DASHBOARD).setIndicator(LayoutInflater.from(getApplicationContext())
.inflate(R.layout.tabview_dashboard, null)),
(tabInfo = new TabInfo(TAB_DASHBOARD, MonitoringTab.class.getName(), args)));
this.mapTabInfo.put(tabInfo.tag, tabInfo);
//create alert list and alert details fragments, add alert list to the tab bar
tabInfo = new TabInfo(TAB_ALERT_DETAILS, AlertDetailTab.class.getName(), args);
this.mapTabInfo.put(tabInfo.tag, tabInfo);
tabInfo = new TabInfo(TAB_ALERTS, AlertListTab.class.getName(), args);
this.mapTabInfo.put(tabInfo.tag, tabInfo);
addTab( this,
this.tabHost,
this.tabHost.newTabSpec(TAB_ALERT_SHOWING).setIndicator(LayoutInflater.from(getApplicationContext())
.inflate(R.layout.tabview_alerts, null)),
tabInfo);
this.mapTabInfo.put(TAB_ALERT_SHOWING, tabInfo);
addTab( this,
this.tabHost,
this.tabHost.newTabSpec(TAB_ERRORQUEUE).setIndicator(LayoutInflater.from(getApplicationContext())
.inflate(R.layout.tabview_errorqueue, null)),
(tabInfo = new TabInfo(TAB_ERRORQUEUE, ErrorMessagesTab.class.getName(), args)));
this.mapTabInfo.put(tabInfo.tag, tabInfo);
// Default to first tab
onTabChanged(TAB_DASHBOARD);
this.tabHost.setOnTabChangedListener(this);
}