Я потратил немного времени на это и недавно получил это работает. Вот резюме.
SlidingTabLayout.java Вы должны изменить метод scrollToTab
, чтобы вычислить правильный свиток. Я добавил пояснительные комментарии здесь:
private void scrollToTab(int tabIndex, float positionOffset) {
final int tabStripChildCount = mTabStrip.getChildCount();
if (tabStripChildCount == 0 || tabIndex < 0 || tabIndex >= tabStripChildCount) {
return;
}
View selectedChild = mTabStrip.getChildAt(tabIndex);
View nextChild = mTabStrip.getChildAt(tabIndex + 1);
if (selectedChild != null) {
// c1 is the center of the currently selected tab
int c1 = selectedChild.getLeft() + (selectedChild.getWidth()/2);
// viewCenter is the center of the parent view
int viewCenter = getWidth()/2;
int targetCenter = c1;
if (nextChild != null) {
// c2 is the center of the tab to the right of the currently selected
int c2 = nextChild.getLeft() + (nextChild.getWidth()/2);
// the 'targetCenter' is partway between c1 & c2 depending on how far the viewpager
// is currently scrolled
targetCenter = (int) (c1 + ((c2 - c1) * positionOffset));
}
int targetScrollX = targetCenter - viewCenter;
scrollTo(targetScrollX, 0);
}
}
Обратите внимание, что это изменило аргумент positionOffset
от int
к float
, это преднамеренно, мы больше не можем использовать исходное значение передается из InternalViewPagerListener
«s onPageScrolled
поскольку он не учитывал ширину следующей вкладки. Это означает, что в этом методе onPageScrolled
мы должны изменить:
View selectedTitle = mTabStrip.getChildAt(position);
int extraOffset = (selectedTitle != null)
? (int) (positionOffset * selectedTitle.getWidth())
: 0;
scrollToTab(position, extraOffset);
быть:
scrollToTab(position, positionOffset);
Это дает нам доступ к необработанным positionOffset
парам, что нам нужно сделать правильный расчет.
Это единственные необходимые изменения. Я разместил здесь полный класс: https://gist.github.com/danh32/c39465c8b04db059fe72
Возможный дубликат [Активная вкладка Android TabHost Center] (http://stackoverflow.com/questions/9878785/android-tabhost-center-active-tab) – tachyonflux
@karaokyo его вполне очевидно, что его не дубликат: D – edwinj
@AndreyLaw Не могли бы вы показать код, который вы использовали? Все, что я мог сделать сейчас, это дать вам ссылку на хороший учебник - http://www.exoguru.com/android/material-design/navigation/android-sliding-tabs-with-material-design.html – edwinj