Попытка переключить 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
программно на основе ширины.