是否有可能在android中更改所选Tab的颜色?

时间:2012-02-20 05:23:40

标签: android colors tabs

您好我的标签小部件中有两个标签,我想为两个标签应用两种不同的颜色。在任何地方搜索,大多数应用标签时所有颜色都相同。

更新

选择红色时,

第一个标签

选择蓝色时

第二个标签

这是我的代码

tabHost = (TabHost)findViewById(android.R.id.tabhost);
    TabSpec firstTabSpec = tabHost.newTabSpec("tid1");//these are color red
    TabSpec secondTabSpec = tabHost.newTabSpec("tid1");//these color blue
    firstTabSpec.setIndicator("Sales Info",getResources().getDrawable(R.drawable.sales));
    Intent photosIntent = new Intent(this, a.class);
    firstTabSpec.setContent(photosIntent);
    secondTabSpec.setIndicator("Service Info",getResources().getDrawable(R.drawable.services));
    Intent photosIntent1 = new Intent(this, b.class);
    secondTabSpec.setContent(photosIntent1);
    tabHost.addTab(firstTabSpec);
    tabHost.addTab(secondTabSpec);

3 个答案:

答案 0 :(得分:12)

试试这个:

...onCreate(){

     ...
     tabHost.setOnTabChangedListener(new OnTabChangeListener() {

    @Override
    public void onTabChanged(String arg0) {

        setTabColor(tabHost);
    }
     });
     setTabColor(tabHost);
...
}

//Change The Backgournd Color of Tabs
public void setTabColor(TabHost tabhost) {

    for(int i=0;i<tabhost.getTabWidget().getChildCount();i++)
        tabhost.getTabWidget().getChildAt(i).setBackgroundColor(COLOR_CYAN); //unselected

    if(tabhost.getCurrentTab()==0)
           tabhost.getTabWidget().getChildAt(tabhost.getCurrentTab()).setBackgroundColor(COLOR_RED); //1st tab selected
    else
           tabhost.getTabWidget().getChildAt(tabhost.getCurrentTab()).setBackgroundColor(COLOR_BLUE); //2nd tab selected
}

答案 1 :(得分:7)

您可以使用ListenerTabHost设置setOnTabChangedListener并动态更改

  public void onCreate(Bundle savedInstanceState){
   // add your tabs here

   // set the First Tab as selected Tab.
  setSelectedTabColor();
}

创建一个方法,设置Selected的{​​{1}}和Unselected颜色。

Tab

然后在 private void setSelectedTabColor() { for(int i=0;i<tabHost.getTabWidget().getChildCount();i++) { tabHost.getTabWidget().getChildAt(i) .setBackgroundColor(Color.WHITE); } tabHost.getTabWidget().getChildAt(tabHost.getCurrentTab()) .setBackgroundColor(Color.RED); } 内,您可以动态更改背景。

onTabChanged()

您可以对@Override public void onTabChanged(String tabId) { setSelectedTabColor(); } selected标签使用相同的标签,here也是相同的博客。

答案 2 :(得分:2)

使用setIndicator(视图视图)而不是setIndicator(CharSequence标签,Drawable图标)。您将传递的视图的背景设置(例如,如果您正在为父布局充气xml)应该是一个ColorStateList来处理点击。