ActionBar Tab 表示でアイコンを使用して選択時と非選択時のアイコンを変える場合、、
このようなTabデザインの時、、
単純だが、以下のように選択時のアイコンと非選択時のアイコンの drawable ID を返すものを用意する
private int getTabIconId(int position, boolean selected){
switch(position){
case 0:
return selected ? R.drawable.ic_action_1 : R.drawable.ic_action_1_unselect;
case 1:
return selected ? R.drawable.ic_action_2 : R.drawable.ic_action_2_unselect;
case 2:
return selected ? R.drawable.ic_action_3 : R.drawable.ic_action_3_unselect;
default:
return selected ? R.drawable.ic_action_1 : R.drawable.ic_action_1_unselect;
}
}
このメソッドを Activity の中に書き、android.app.ActionBar#newTab() 時は、selected = false を、
ActionBar.TabListener の onTabSelected では、selected = true
ActionBar.TabListener の onTabUnselected では、selected = false を実行する。
public class SampleActivity extends FragmentActivity implements ActionBar.TabListener{
SectionsPagerAdapter mSectionsPagerAdapter;
ViewPager mViewPager;
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
final ActionBar actionBar = getActionBar();
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());
mViewPager = (ViewPager)findViewById(R.id.pager);
mViewPager.setAdapter(mSectionsPagerAdapter);
mViewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener(){
@Override
public void onPageSelected(int position){
actionBar.setSelectedNavigationItem(position);
}
});
for(int i=0;i < mSectionsPagerAdapter.getCount();i++){
actionBar.addTab(actionBar.newTab()
.setIcon(getTabIconId(i, false))
.setTabListener(this)
);
}
}
@Override
public void onTabSelected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction){
tab.setIcon(getTabIconId(tab.getPosition(), true));
mViewPager.setCurrentItem(tab.getPosition());
}
@Override
public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction){
tab.setIcon(getTabIconId(tab.getPosition(), false));
}
@Override
public void onTabReselected(Tab tab, FragmentTransaction ft){
// Tabが再選択された時の処理、注意!swipe 操作では呼ばれない、
// Tab を再選択としてタップした時に呼ばれる。
}