很多情况都会遇到scrollView里面嵌套tabLayout+viewPager,因为tabLayout上面有很多东西,所以处于屏幕下方,所以可能会要求点击tabLayout的时候tabLayout和viewPager置顶,以下就是代码实现。
for (int i = 0; i < tabLayout.getTabCount(); i++) {
TabLayout.Tab tab = tabLayout.getTabAt(i);
if (tab == null) return;
//这里使用到反射,拿到Tab对象后获取Class
Class c = tab.getClass();
try {
//获取tab的view属性 name可能会不一样 可以进源码看看
Field field = c.getDeclaredField("view");
//反射的对象在使用时取消Java语言访问检查
field.setAccessible(true);
//获取view
final View view = (View) field.get(tab);
if (view == null) return;
view.setTag(i);
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//业务逻辑
scrollView.setScrollY(scrollTop);
}
});
} catch (Exception e) {
e.printStackTrace();
}
}