【问题标题】:How do I change the color and/or drawable of the TabWidget divider in Android?如何在 Android 中更改 TabWidget 分隔线的颜色和/或可绘制对象?
【发布时间】:2011-03-04 03:12:50
【问题描述】:

我正在使用 TabLayout,并且我为正在使用的选项卡提供了自定义图像,但是对于我的生活,我无法弄清楚如何更改选项卡和选项卡之间分隔线的颜色甚至图像选项卡内容。我曾尝试使用 setDividerDrawable(),但是当我在设置选项卡内容之前调用它时它会崩溃,并且在我之后调用它时什么也不做。如果我能把它变成黑色就足够了,但到目前为止还没有任何效果。感谢您的指导。

【问题讨论】:

    标签: android xml drawable tabwidget divider


    【解决方案1】:

    你必须这样做: tabHost.getTabWidget().setDividerDrawable(R.drawable.tab_divider);

    其中 R.drawable.tab_divider 是资源目录中的图像。

    但关键是您必须在将任何选项卡添加到选项卡主机之前执行此操作。

    我的标签初始化代码如下:

    private void initializeTabs(int curTab) {
        this.tabHost = getTabHost();
        tabHost.clearAllTabs();
    
        TabSpec ts1, ts2, ts3, ts4, ts5;
        // tab separator
        tabHost.getTabWidget().setDividerDrawable(R.drawable.tab_divider);
    
        ts1 = this.setupTab(new TextView(this), tabHost, R.drawable.browse_tab_normal, 
                mResources.getString(R.string.Browse));
    
        ts2 = this.setupTab(new TextView(this), tabHost, R.drawable.search_tab_normal, 
                mResources.getString(R.string.Search));
    
        ts3 = this.setupTab(new TextView(this), tabHost, R.drawable.postad_tab_normal, 
                mResources.getString(R.string.Post));
    
        ts4 = this.setupTab(new TextView(this), tabHost, R.drawable.watchlist_tab_normal, 
                mResources.getString(R.string.WatchList));
    
        ts5 = this.setupTab(new TextView(this), tabHost, R.drawable.managead_tab_normal, 
                mResources.getString(R.string.Login));
    
        // intents
        ts1.setContent(new Intent().setClass(this, BrowseTabActivity.class));
        ts2.setContent(new Intent().setClass(this, SearchTabActivity.class));
        ts3.setContent(new Intent().setClass(this, PostAdTabActivity.class));
        ts4.setContent(new Intent().setClass(this, WatchlistTabActivity.class));
        ts5.setContent(new Intent().setClass(this, LoginTabActivity.class));
    
        tabHost.addTab(ts1);
        tabHost.addTab(ts2);
        tabHost.addTab(ts3);
        tabHost.addTab(ts4);
        tabHost.addTab(ts5);
    

    ...

    【讨论】:

    • 答案是可以的,但我怎样才能用相同的代码设置颜色而不是图像。谢谢!
    【解决方案2】:

    定义分隔符的更好方法是从您的 XML 标记中创建 if:

    <TabWidget
         android:layout_width="match_parent"
         android:showDividers="middle"
         android:divider="@drawable/design_tab_divider">
     </TabWidget>
    

    因此,您可以仅从标记中定义可绘制对象。 请注意,您必须使用android:dividerandroid:showDividers="middle" 来在选项卡之间放置分隔符。 有关更多信息,请阅读规范并注意从 LinearLayout 继承的属性 - docs in google

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-03-14
      • 2013-03-27
      • 2011-01-23
      • 1970-01-01
      • 1970-01-01
      • 2013-09-19
      • 2012-02-14
      相关资源
      最近更新 更多