问题 TabLayout选择了标签重力


TabLayout 与...建立 ViewPager,有很多标签, MODE_SCROLLABLE 和keyline app:tabContentStart="72dp"

当用户选择标签时 TabLayout 尝试将选定的选项卡滚动到中心。我希望选定的选项卡与keyline保持对齐,而不是居中。可能吗?

Android设计支持库v22.2.0。


10546
2017-07-09 17:52


起源

你对keyline的意思是什么? - Lennon Petrick
'Keyline'是一个用于的术语 google.com/design/spec/components/tabs.html,在Android设计支持库中,它通过声明 app:tabContentStart。 - Dima Kornilov


答案:


不幸的是方法 calculateScrollXForTab() TabLayout是私有的,然后不能被子类替换。无论哪种方式,您都可以复制项目中的源TabLayout,然后可以使用您的类扩展它,并更改方法 calculateScrollXForTab() 喜欢这个:

private int calculateScrollXForTab(int position, float positionOffset) {
   if (mMode == MODE_SCROLLABLE) {
      View final selectedChild = mTabStrip.getChildAt(position);
      // LoG.i ("scrollTo" String.valueOf ((int) selectedChild.getLeft()));
      return (int) selectedChild.getLeft();
   }
   return 0;
}

这将返回所选选项卡左侧的限制值,然后强制滚动到该值。如果选择,最右边的标签将保持固定在适当的位置,因为滚动会将滚动夹到孩子的边界。

我尝试了它并且它可以工作,虽然我必须用一个找不到的CompatTextView来解决两个问题 android.support.v7.internal.widget 和方法 setupWithViewPager() 在我可用的源代码中不存在(我认为是版本问题)


7
2017-07-17 16:39





如果我理解你的问题,你可以从选定的标签位置减去第一个标签位置。然后,您只需将其设置为此选定选项卡的位置即可。


4
2017-07-13 15:20