TabLayout标题文字不显示的解决操作
问题描述:
使用Design包的TabLayout实现类似网易选项卡动态滑动效果的时候,使用addTab()方法给TabLayout动态添加标题的时候,标题可能会出现不显示文字的情况。
分析:
真实情况并不是不显示文字,二而是ViewPager又给TabLayout添加了许多的标题,导致之前手动添加的标题又被挤到了后面。不信你多往后翻一翻就出来了。
解决办法:
不要为ViewPager手动使用addTab()方法添加标题,而应该先创建一个List集合,将其设置在PagerAdapter的getPageTitle方法中,代码如下:
@Override publicCharSequencegetPageTitle(intposition){ returnmList_title.get(position); }
补充知识:Android中TabLayout的TabItem文字和图片莫名不显示问题处理
Tablayout在没有设置适配器的时候,TabItem的文字和icon是正常显示的,可一旦设置上适配器文字和icon就直接消失,这个时候有两个解决办法(本人暂时只有两个)
1.效果图:
2.正常写法设置适配器后的实图:
解决方法一:自己定TabItem的样式(比较万能,但是指示器的长度不太“听话”,就是不受app:tabIndicatorFullWidth="false"的控制,(自己去设置指示器的长度也没用,想试请看最后的"设置指示器长度代码")):
1.创建一个item_home_tab:
2.java中:
protectedvoidinit(){ fhPager.setAdapter(adapter); fhPager.setCurrentItem(0); fhPager.setOffscreenPageLimit(1); fhTab.setSelectedTabIndicator(R.drawable.bg_submit); fhTab.setupWithViewPager(fhPager); Objects.requireNonNull(fhTab.getTabAt(0)).setCustomView(getview("热点",R.drawable.ic_fire_state)); Objects.requireNonNull(fhTab.getTabAt(1)).setCustomView(getview("要闻",R.drawable.ic_news_state)); Objects.requireNonNull(fhTab.getTabAt(2)).setCustomView(getview("时政",R.drawable.ic_politics_state)); Objects.requireNonNull(fhTab.getTabAt(3)).setCustomView(getview("粤头条",R.drawable.ic_fire_state)); Objects.requireNonNull(fhTab.getTabAt(4)).setCustomView(getview("分类",R.drawable.ic_classify_state)); } privateViewgetview(Stringtitle,inticon){ Viewview=LayoutInflater.from(getActivity()).inflate(R.layout.item_home_tab,null); TextViewtv=view.findViewById(R.id.tv); ImageViewiv=view.findViewById(R.id.iv); tv.setText(title); iv.setImageResource(icon); returnview; }
结果1:当Tablayout的app:tabIndicatorFullWidth="false"时出来的效果图:
结果2:当Tablayout的app:tabIndicatorFullWidth="true"出来的效果图:
解决办法二(指示器长度"听话"(受app:tabIndicatorFullWidth="false"的控制),但是icon的大小就只能由系统来定):
fhPager.setAdapter(adapter); fhPager.setCurrentItem(0); fhPager.setOffscreenPageLimit(1); fhTab.setSelectedTabIndicator(R.drawable.bg_submit); fhTab.setupWithViewPager(fhPager); //设置tabItem的文字和icon fhTab.getTabAt(0).setText("热点").setIcon(R.drawable.ic_fire_state); fhTab.getTabAt(1).setText("要闻").setIcon(R.drawable.ic_news_state); fhTab.getTabAt(2).setText("时政").setIcon(R.drawable.ic_politics_state); fhTab.getTabAt(3).setText("粤头条").setIcon(R.drawable.ic_first_state); fhTab.getTabAt(4).setText("分类").setIcon(R.drawable.ic_classify_state);
结果1:当Tablayout的app:tabIndicatorFullWidth="false"时出来的效果图:
结果2:当Tablayout的app:tabIndicatorFullWidth="true"出来的效果图:
end...
设置TabLayout指示器的长度:
//指示器长度 publicstaticvoidsetIndicator(TabLayouttabs,intleftDip,intrightDip,intbottomDip){ if(tabs==null){ return; } ClasstabLayout=tabs.getClass(); FieldtabStrip=null; try{ tabStrip=tabLayout.getDeclaredField("mTabStrip"); }catch(NoSuchFieldExceptione){ e.printStackTrace(); return; } tabStrip.setAccessible(true); LinearLayoutllTab=null; try{ llTab=(LinearLayout)tabStrip.get(tabs); }catch(IllegalAccessExceptione){ e.printStackTrace(); return; } intleft=(int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,leftDip,Resources.getSystem().getDisplayMetrics()); intright=(int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,rightDip,Resources.getSystem().getDisplayMetrics()); intbottom=(int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,bottomDip,Resources.getSystem().getDisplayMetrics()); for(inti=0;i以上这篇TabLayout标题文字不显示的解决操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。