Можно ли изменить цвет выбранной вкладки в андроиде? - PullRequest
8 голосов
/ 20 февраля 2012

Привет, у меня есть две вкладки в моем виджете вкладок, я хочу применить два разных цвета для двух tabs.am, ищущих везде, в основном все цвета одинаковы при применении вкладки.

update

первая вкладка при выборе красного цвета

вторая вкладка при выборе синего цвета

Вот мой код

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 ]

13 голосов
/ 20 февраля 2012

Попробуйте это:

...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
}
7 голосов
/ 20 февраля 2012

Вы можете установить Listener для вашего TabHost, используя setOnTabChangedListener, и динамически изменить его,

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

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

Создать метод, который установит Selected и 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 и unselected Tab, here - это блог для того же.

2 голосов
/ 20 февраля 2012

Используйте setIndicator (представление View) вместо setIndicator (метка CharSequence, значок Drawable).Фоновая настройка вида, который вы передаете (например, если вы надуваете XML родительский макет), должна быть ColorStateList для обработки кликов.

...