Android记录3--TabLayout相关小知识

TabLayout+ViewPager+Fragment的使用及重复onCreateView问题解决

使用TabLayout+ViewPager进行切换现在貌似已经成了很多app的标配,但是最近使用过程中发现有一个问题

如果从页面1点击切换到页面3,然后切换回页面1时,页面1会重新创建,此时会重复调用onCreateView

解决办法:
设置缓存页面数

1
mContentVp.setOffscreenPageLimit(4);

其中,mContentVp即为ViewPager变量
viewPager.setOffscreenPageLimit(int limit) 能够有效地一次性缓存多个Fragment,这样就能够解决在之后每次切换时不会创建实例对象,看起来也会流畅。但是这样的做法,最大的缺点就是容易造成第一次启动时非常缓慢!如果第一次启动时间满足要求的话,可以试试这种简单的办法。

TabLayout+ViewPager,默认首选项设置select()无效

由于使用了自定义布局,所以应该操作如下:

1
mTabLayout.getTabAt(i).getCustomView().setSelected(true);

Tablayout之Tab宽度左右无法填充

前段时间做一个项目使用到了Tablayout,可以用来实现类似知乎分栏的效果要使用Tablayout,必须引用Google的Android Support Design库,使用Android Studio 的同学可以直接使用只要在build.gradle中加入

1
compile 'com.android.support:design:22.2.0'

即可

遇到的问题

使用中,我需要设置Tab的点击效果,所以我新建了一个selector,并将每一个tab的界面背景设置为该selector

1
2
3
4
5
itemTab.setCustomView(R.layout.item_tab_layout_custom);
itemTab.getCustomView().setBackgroundResource(R.drawable.selector_tab);
TextView itemTv = (TextView) itemTab.getCustomView().findViewById(R.id
.tv_menu_item);
itemTv.setText(tabIndicators.get(i));

解决办法

百度了两天后,还是没有解决该问题,直到第三天,我的科学上网工具又好了- -感动到晕厥(事实证明,程序员真的不适合用百度,生活服务还好)
我google到了下面一篇文章,其中讲到了:
如果你设置了TabMode为MODE_FIXED然后发现文本并没有包围全局,或许是因为Tablayout在创建时应用了一些嵌入设置,你可以将下面的代码写入xml以解决此问题:

1
2
app:tabPaddingStart="-1dp"
app:tabPaddingEnd="-1dp"

由此可见,问题完美解决

总结

经过了这一次的问题,越发觉得程序员学会科学上网是多么重要,也增加了自己查询解决问题的能力,Tablayout作为谷歌推出的遵循MD的控件,应该多加学习利用。