Как установить поведение привязки для TabLayout - PullRequest
0 голосов
/ 06 октября 2018

Я использую TabLayout, чтобы показать значок и название разных вкладок.С TabLayout я использую ViewPager, чтобы добавить Fragments для каждой вкладки.TabLayout с интерактивными вкладками (и они расположены по центру при нажатии) работает, но я хочу реализовать ту же функциональность, что и RecyclerView SnapHelper.Если я прокручиваю вкладки TabLayout, он привязывает вид к центру экрана и выбирает его.Это должно показать Fragment под TabLayout.

Есть ли способ, как это сделать?

Это мой пользовательский TabLayout, который будет отображать щелчок по центру.

class CenteredTabLayout : TabLayout {
    constructor(context: Context) : super(context) {}

    constructor(context: Context, attrs: AttributeSet) : super(context, attrs) {}

    constructor(context: Context, attrs: AttributeSet, defStyleAttr: Int) : super(context, attrs, defStyleAttr) {}

    override fun onLayout(changed: Boolean, l: Int, t: Int, r: Int, b: Int) {
        super.onLayout(changed, l, t, r, b)
        val firstTab = (getChildAt(0) as ViewGroup).getChildAt(0)
        val lastTab = (getChildAt(0) as ViewGroup).getChildAt((getChildAt(0) as ViewGroup).childCount - 1)
        if (firstTab != null && lastTab != null){
            ViewCompat.setPaddingRelative(getChildAt(0), width / 2 - firstTab.width / 2, 0, width / 2 - lastTab.width / 2, 0)
        }
    }
}

1 Ответ

0 голосов
/ 01 марта 2019

TabLayout сила тяжести выбранной вкладки

tl; dr При использовании TabLayout по умолчанию вы не можете изменять эффект привязки .Поскольку метод вычисления расстояния его перемещения calculateScrollXForTab является закрытым и не может быть заменен.

Я также хотел сделать несколько специальных привязок с моим TabLayout.В конце концов я сдался и создал свой собственный RecyclerView и адаптер для вкладок.Мне не нужен индикатор, который предоставляется TabLayout (создал мой пользовательский индикатор).Поэтому все, что мне нужно было сделать, это реализовать ViewPager.OnPageChangeListener с помощью моего адаптера.

Кроме того, я узнал о том, как прокрутку действительно помог другой исходный код.

Например, https://github.com/nshmura/RecyclerTabLayout

...