现在我正在尝试使用imagespan显示图标而不是文本。但没有运气,任何人都可以帮助指出本教程中缺少的内容吗?
这是代码
public class HomeActivity extends FragmentActivity {
//Fragments List
public ArrayList <Fragment> fragmentList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
setUpFragmentList();
// Get the ViewPager and set it's PagerAdapter so that it can display items
ViewPager viewPager = (ViewPager) findViewById(R.id.home_viewpager);
viewPager.setAdapter(new HomeFragmentPagerAdapter(getSupportFragmentManager(), HomeActivity.this, fragmentList));
// Give the TabLayout the ViewPager
TabLayout tabLayout = (TabLayout) findViewById(R.id.sliding_tabs);
//start this 2 are to set the tab to fill entire screen
tabLayout.setTabMode(TabLayout.MODE_FIXED);
tabLayout.setTabGravity(TabLayout.GRAVITY_FILL);
//end this 2 are to set the tab to fill entire screen
tabLayout.setupWithViewPager(viewPager);
tabLayout.getTabAt(1).setIcon(R.drawable.ic_tab_down_activity);
}
private void setUpFragmentList() {
fragmentList = new ArrayList<>();
fragmentList.add(new MyActivitesFragment());
fragmentList.add(new ChatListFragment());
fragmentList.add(new QuickMatchFragment());
fragmentList.add(new FilterMatchFragment());
}
}
public class HomeFragmentPagerAdapter extends FragmentPagerAdapter {
private String tabTitles[] = new String[] { "Tab1", "Tab2", "Tab3" ,"Tab4"};
private Context context;
private ArrayList <Fragment> fragmentList;
private int[] imageResId = {
// unclicked
R.drawable.ic_tab_down_activity,
R.drawable.ic_tab_down_chat,
R.drawable.ic_tab_down_find,
R.drawable.ic_tab_down_filter,
};
public HomeFragmentPagerAdapter(FragmentManager fm, Context context, ArrayList <Fragment> fragmentList) {
super(fm);
this.context = context;
this.fragmentList = fragmentList;
}
@Override
public int getCount() {
return fragmentList.size();
}
@Override
public Fragment getItem(int position) {
return fragmentList.get(position);
}
@Override
public CharSequence getPageTitle(int position) {
Drawable image = context.getResources().getDrawable(imageResId[position]);
image.setBounds(0, 0, image.getIntrinsicWidth(), image.getIntrinsicHeight());
SpannableString sb = new SpannableString(" ");
ImageSpan imageSpan = new ImageSpan(image, ImageSpan.ALIGN_BOTTOM);
sb.setSpan(imageSpan, 0, 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
return sb;
}
}
答案 0 :(得分:4)
在自定义标签布局文件中,只需将textAllCaps设为false即可。它会工作:) 原因是,图像被转换为字符,如果是真的,那么将它们转换为大写将不会渲染图像。
<style name="MyCustomTabTextAppearance" parent="TextAppearance.Design.Tab">
<item name="android:textSize">16sp</item>
<item name="android:textColor">?android:textColorSecondary</item>
<item name="textAllCaps">false</item>
</style>
答案 1 :(得分:3)
显然我已经通过使用TabLayout.getTabAt(i).setIcon(imageResId [i]);
找到了解决方案。起初我的目的是能够从viewpager适配器设置所有图标。但既然我不知道也没有时间找到解决方案。我会改用我发现的另一个技巧。
并且还要切换图像我使用TabLayout.TabLayoutOnPageChangeListener
希望这也可以帮助那些需要这个的人。 =]
答案 2 :(得分:0)
您尚未添加任何标签。
添加如下标签: tabLayout.addTab(tabLayout.newTab()。setText(“Tab One”));。
答案 3 :(得分:0)
嗯,我猜你错过了xml的主要观点。为选项卡布局设置文本外观样式。即textAllCaps = false否则图像跨度将无效。