4

我使用 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);
}
4

0 回答 0