2014-09-26 3 views
1

У меня есть приложение с MainActivity, которое расширяет TabActivity (я знаю, что он устарел, но слишком много, чтобы изменить все приложение).Изменить цвет вкладок в зависимости от того, какая вкладка выбрана

Так что в моем приложении я использую tabhost создать 3 вкладки, как это:

TabHost tabHost = (TabHost) findViewById(android.R.id.tabhost); 
TabSpec firstTabSpec = tabHost.newTabSpec("tid1"); 
TabSpec secondTabSpec = tabHost.newTabSpec("tid2"); 
TabSpec thirdTabSpec = tabHost.newTabSpec("tid3"); 

firstTabSpec.setIndicator("tab1").setContent(
      new Intent(this, tab1.class)); 
    secondTabSpec.setIndicator("tab2").setContent(
      new Intent(this, tab2.class)); 
    thirdTabSpec.setIndicator("tab3").setContent(
      new Intent(this, tab3.class)); 

    /* Add tabSpec to the TabHost to display. */ 

    tabHost.addTab(firstTabSpec); 
    tabHost.addTab(secondTabSpec); 
    tabHost.addTab(thirdTabSpec); 


    //Changing the tabs text color on the tabs 
    for(int i=0;i<tabHost.getTabWidget().getChildCount();i++) 
    { 
     TextView tv = (TextView) tabHost.getTabWidget().getChildAt(i).findViewById(android.R.id.title); 
     tv.setTextColor(Color.parseColor("#ffffff")); 
    } 

    // remove divider 
    tabHost.getTabWidget().setDividerDrawable(null); 

    tabHost.getTabWidget().getChildAt(0).setBackgroundColor(Color.parseColor("#90a4ae")); 
    tabHost.getTabWidget().getChildAt(1).setBackgroundColor(Color.parseColor("#607d8b")); 
    tabHost.getTabWidget().getChildAt(2).setBackgroundColor(Color.parseColor("#607d8b")); 

Так что мой код создает 3 вкладки, которые ссылаются на 3-х различных видов деятельности и устанавливает цвет вкладок. Первая вкладка сначала загружает другой цвет, чем две другие.

Я хочу, чтобы цвет вкладок менялся в зависимости от выбранного. Итак, когда я нажимаю вторую вкладку, я хочу, чтобы первый получил цвет # 607d8b, а второй получил # 90a4ae. То же самое для третьего.

Пытался внедрить OnTabChangeListener, но не смог заставить его работать. Пробовал так:

tabHost.getTabWidget().getChildAt(0).setBackgroundColor(Color.parseColor("#90a4ae")); 
    tabHost.getTabWidget().getChildAt(1).setBackgroundColor(Color.parseColor("#607d8b")); 
    tabHost.getTabWidget().getChildAt(2).setBackgroundColor(Color.parseColor("#607d8b")); 

с измененными цветами внутри каждой загруженной вкладке активности, но я получаю сообщение об ошибке, что он не может разрешить tabhost (как это необходимо, так как это определено в MainActivity

ответ

1
tabHost.setOnTabChangedListener(new OnTabChangeListener() { 

    @Override 
    public void onTabChanged(String tabId) { 
     // TODO Auto-generated method stub 
     for (int i = 0; i < tabHost.getTabWidget().getChildCount(); i++) { 
       tabHost.getTabWidget().getChildAt(i).setBackgroundColor(Color.parseColor("#54C4C6")); // unselected 
     } 

     tabHost.getTabWidget().getChildAt(tabHost.getCurrentTab()).setBackgroundColor(Color.parseColor("#114C5A")); // selected 
    } 
}); 
+1

Thanx. много! Он работал как шарм! Исправлены цвета по моему вкусу, и теперь это прекрасно! – duk3r

+0

всегда приветствуется. –

Смежные вопросы