选定标签的TabLayout对齐方式

13

TabLayout 是使用 ViewPager 设置的,具有许多选项卡、MODE_SCROLLABLE 和关键线 app:tabContentStart="72dp"

当用户选择一个选项卡时,TabLayout 会尝试将所选选项卡滚动到中心。我希望所选选项卡左对齐关键线,而不是居中。这可行吗?

Android 设计支持库 v22.2.0。


关于keyline,你是什么意思? - Lennon Spirlandelli
1
“Keyline”是一个术语,用于https://www.google.com/design/spec/components/tabs.html,在Android Design Support Library中通过app:tabContentStart声明。 - Dima Kornilov
2个回答

8

很不幸,TabLayout的calculateScrollXForTab()方法是私有的,因此无法被子类替换。不过你可以将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;
}

这将返回所选标签左侧的限制值,然后强制滚动到该值。如果选择极右侧的标签,则它们将保持固定位置,因为滚动夹紧到子元素的边界。

我尝试了一下,它可以正常工作,尽管我不得不解决两个问题,一个是在android.support.v7.internal.widget中找不到CompatTextView,另一个是方法setupWithViewPager() 在我可用的源代码中不存在(我认为这是版本问题)。


4
如果我理解你的问题正确,你可以从选定的标签位置中减去第一个标签位置。接着,你只需将差异作为该选定标签的位置设置即可。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接