Попытка переключить tabLayout tabMode между прокручиваемым и фиксированным, но ширина tablayout всегда становится меньше ширины экрана

Я добавляю предметы в tabLayout программно из фрагмента. Так что мне нужно установить tabMode прокручиваемый или исправленный в зависимости от размера вкладок. Я прочитал много вопросов здесь, но я не мог найти решение для моего случая. То, что я пробовал до сих пор,

В моем фрагменте

<android.support.design.widget.TabLayout
    android:id="@+id/tabs"
    android:layout_width="wrap_content"
    android:layout_height="?attr/actionBarSize"
    app:tabTextColor="@color/colorPrimary"
    app:tabGravity="fill"
    app:tabMode="scrollable"/>

В моем фрагменте

if(mTabLayout.getWidth() < HomeFragment.this.getResources().getDisplayMetrics().widthPixels)
{
    mTabLayout.setTabMode(TabLayout.MODE_FIXED);
    ViewGroup.LayoutParams mParams = mTabLayout.getLayoutParams();
    mParams.width = ViewGroup.LayoutParams.MATCH_PARENT;
    mTabLayout.setLayoutParams(mParams);
}
else
{
    mTabLayout.setTabMode(TabLayout.MODE_SCROLLABLE);
}

Но я получаю mTabLayout.getWidth() значение всегда равно 0, и getResources().getDisplayMetrics().widthPixels получить значение 1080. Таким образом, вкладка всегда устанавливается tabMode фиксированной согласно условию.

Но когда я меняюсь android:layout_width в "match_parent"показывает значение mTabLayout.getWidth() как 1032, даже если на вкладке достаточно элементов для прокрутки. Я также попробовал следующий метод

int totalTabPaddingPlusWidth = 0;
for(int i=0; i < mTabLayout.getTabCount(); i++){

    final LinearLayout tabView = ((LinearLayout)((LinearLayout) mTabLayout.getChildAt(0)).getChildAt(i));
    totalTabPaddingPlusWidth += (tabView.getMeasuredWidth() + tabView.getPaddingLeft() + tabView.getPaddingRight());
}

Из этого метода я получаю ширину как 360.

Однако это сработало, но когда количество вкладок меньше, оно не подходит родительскому элементу, а выравнивается по центру. этот

Как я могу сделать это работает нормально? Я предпочитаю устанавливать tabMode программно на основе ширины.

0 ответов

Другие вопросы по тегам