【问题标题】:TabLayout selected tab gravityTabLayout 选定的选项卡重力
【发布时间】:2015-09-28 06:17:11
【问题描述】:

TabLayout 设置有ViewPager,有很多标签,MODE_SCROLLABLE 和keyline app:tabContentStart="72dp"

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

Android 设计支持库 v22.2.0。

【问题讨论】:

标签: android android-design-library androiddesignsupport android-tablayout


【解决方案1】:

如果我很好地理解了您的问题,您可以从选定的标签位置中减去第一个标签位置。然后,您只需将不同设置为此选定选项卡的位置。

【讨论】:

    【解决方案2】:

    不幸的是,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;
    }
    

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

    我试过了,它可以工作,尽管我必须解决两个问题,其中一个 CompatTextView 没有在 android.support.v7.internal.widget 中找到,而方法 setupWithViewPager() 在我可以使用的源代码(我认为是版本问题)

    【讨论】: