Поиск по этому блогу

понедельник, 26 декабря 2011 г.

Tab Layout на Android часть третья

Сегодня стала задача сделать в одной программке табы не стандартного цвета, а немного другого. Вот я Вам и расскажу как я это делал.



Для начала вспоминаем мои старые посты про TabLayout — первая часть и вторая часть, эта часть должна быть третей, пусть так и будет :)

Для того что бы у нас были красивые табы нам нужно произвести три пункта действий:

1. Пишем код в OnCreate (), для определения исходного цвета фона для выбранных и не выбранных табов.


for(int i=0;i<tabHost.getTabWidget().getChildCount();i++) // цикл для полного прохождения по всем табам
{
   tabHost.getTabWidget().getChildAt(i).setBackgroundColor(Color.parseColor("#8A4117")); // цвет табов
}
 tabHost.getTabWidget().setCurrentTab(1);
 tabHost.getTabWidget().getChildAt(1).setBackgroundColor(Color.parseColor("#8A4117")); //цвет табов
//говняно-коричневый :)


2. Для того что бы видно было какой таб сейчас активен нам нужно написать методonTabChanged(), вот давайте и напишем его:

@Override
    public void onTabChanged(String tabId) {
        for(int i=0;i<tabHost.getTabWidget().getChildCount();i++)
        {
            tabHost.getTabWidget().getChildAt(i).setBackgroundColor(Color.parseColor("#8A4117"));
        }
        tabHost.getTabWidget().getChildAt(tabHost.getCurrentTab()).setBackgroundColor(Color.parseColor("#C35817"));
    }


3. Для полного вида оно в коде будет выглядеть вот так:

public class TabBarExample extends TabActivity implements OnTabChangeListener
{
    /** Called when the activity is first created. */
      TabHost tabHost;
          
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        tabHost = getTabHost();

        tabHost.setOnTabChangedListener(this);
                
        TabHost.TabSpec spec;
        Intent intent;
                
        intent = new Intent().setClass(this, FirstActivity.class);
        spec = tabHost.newTabSpec("First").setIndicator("First").setContent(intent);
        tabHost.addTab(spec);

        intent = new Intent().setClass(this, SecondActivity.class);
        spec = tabHost.newTabSpec("Second").setIndicator("Second").setContent(intent);
        tabHost.addTab(spec);

        intent = new Intent().setClass(this, ThirdActivity.class);
        spec = tabHost.newTabSpec("Third").setIndicator("Third").setContent(intent);
        tabHost.addTab(spec);
                
        intent = new Intent().setClass(this, FourthActivity.class);
        spec = tabHost.newTabSpec("Fourth").setIndicator("Fourth").setContent(intent);
        tabHost.addTab(spec);
                
                
        for(int i=0;i<tabHost.getTabWidget().getChildCount();i++)
        {
            tabHost.getTabWidget().getChildAt(i).setBackgroundColor(Color.parseColor("#8A4117"));
        }
        tabHost.getTabWidget().setCurrentTab(1);
        tabHost.getTabWidget().getChildAt(1).setBackgroundColor(Color.parseColor("#8A4117"));
     }
    @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("#C35817"));
        }
        tabHost.getTabWidget().getChildAt(tabHost.getCurrentTab()).setBackgroundColor(Color.parseColor("#C35817"));
    }
}


И вот что у нас получилось на выходе


Но бывает такое что хочется вместо обычной заливки вставить картинку! Давайте вставим картинки. 
Вот эти мы будем вставлять в проект

1. 
2. 

заливаем их в res — drawable и заменяем в коде нужные
setBackgroundColor(Color.parseColor("#8A4117"));

на
setBackgroundResource(R.drawable.blue);//green


И тогда вместо этого говняного цвета у нас будет красивые зелено-голубые табы.

Спасибо за внимание, будут вопросы обращайтесь.