在PagerSlidingTab中添加图标+文本



我为Text实现了Astuetz的PagerSlidingTabStrip作为Tab。但我希望同时拥有图标和文本。我从这个链接了解到Astuetz可以有文本或iocn。我可以为这个定制布局吗?此外,我希望选项卡从中心开始,下划线指示器是中心固定的。

MainActivity
public class MainActivity extends FragmentActivity {
	
	private PagerSlidingTabStrip tabs;
	private ViewPager pager;
	private MyPagerAdapter adapter;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		tabs = (PagerSlidingTabStrip) findViewById(R.id.tabs);
		pager = (ViewPager) findViewById(R.id.pager);
		adapter = new MyPagerAdapter(getSupportFragmentManager());
		pager.setAdapter(adapter);
		
		final int pageMargin = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 4, getResources()
				.getDisplayMetrics());
		pager.setPageMargin(pageMargin);
		tabs.setViewPager(pager);
		
	}
	public class MyPagerAdapter extends FragmentPagerAdapter{
		private final String[] TITLES = { "Contact", "Home"};
		//private final int[] ICONS = { R.drawable.ic_contact, R.drawable.ic_home};
		public MyPagerAdapter(FragmentManager fm) {
			super(fm);
		}
		@Override
		public CharSequence getPageTitle(int position) {
			return TITLES[position];
		}
		@Override
		public int getCount() {
			return TITLES.length;
		}
		@Override
		public Fragment getItem(int position) {
			return SuperAwesomeCardFragment.newInstance(position);
		}
	}
}

正如库中的方法所示,如果不修改代码,就无法完成此操作。你需要付出同样的代价。如以下方法所示-

for (int i = 0; i < tabCount; i++) {
        if (pager.getAdapter() instanceof IconTabProvider) {
            addIconTab(i, ((IconTabProvider) pager.getAdapter()).getPageIconResId(i));
        } else {
            addTextTab(i, pager.getAdapter().getPageTitle(i).toString());
        }
    }

一次只能有一个文本或图标。我建议您使用来自设计支持库的TabLayout。您可以使用setCustomView方法在选项卡中设置自定义视图。

最新更新