как лучше всего установить режим вкладок для планшетов?

Я использую TabLayout из библиотеки поддержки Android Design. Как я могу использовать MODE_SCROLLABLE вместе с GRAVITY_FILL, чтобы он выглядел одинаково на всех устройствах и ориентациях?

В настоящее время, если я использую MODE_SCROLLABLE, он выглядит хорошо на 7-дюймовом планшете, но на 10-дюймовом планшете вкладки выровнены по левому краю. Я хочу иметь возможность использовать GRAVITY_FILL для всех размеров.

Это моя табличка:

<android.support.design.widget.TabLayout
    android:id="@+id/tab_layout"
    android:layout_width="match_parent"
    android:layout_height="72dp"            
/>

и я устанавливаю режим в коде

 tabLayout.setTabMode(TabLayout.MODE_SCROLLABLE);

person Sammys    schedule 08.07.2015    source источник


Ответы (3)


Согласно документации TabLayout.GRAVITY_FILL:

Гравитация использовалась для максимального заполнения TabLayout. Этот параметр действует только при использовании с MODE_FIXED.

Поэтому при установке режима MODE_SCROLLABLE вкладки всегда выравниваются от начального края — единственная разница между планшетами и телефонами для режима MODE_SCROLLABLE заключается в минимальной ширине вкладок, установленной спецификация дизайна вкладок.

Обратите внимание, что вы можете указать как режим гравитации, так и режим табуляции через XML, если вы хотите, чтобы представление всегда было прокручиваемым:

<android.support.design.widget.TabLayout
  android:id="@+id/tab_layout"
  android:layout_width="match_parent"
  android:layout_height="72dp"
  app:tabMode="scrollable"
/>
person ianhanniballake    schedule 08.07.2015
comment
Я хочу, чтобы представление можно было прокручивать, если недостаточно ширины. Но если ширина доступна, я хочу, чтобы они использовали GRAVITY_FILL. Есть ли способ добиться этого? По сути, я хочу убедиться, что tablayout всегда используетgravity_fill для телефонов, 7 планшетов и 10 планшетов в обеих ориентациях. Но если я использую GRAVITY_FILL с MODE_FIXED, текст на моих вкладках обрезается. - person Sammys; 09.07.2015
comment
Согласно спецификации использования вкладок, фиксированные и прокручиваемые вкладки имеют другой вариант использования и не обязательно взаимозаменяемы. Вот почему по умолчанию единственное, что меняется в зависимости от размера экрана, — это гравитация. - person ianhanniballake; 09.07.2015

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

 DisplayMetrics displayMetrics = getResources().getDisplayMetrics();
        float dpWidth = displayMetrics.widthPixels / displayMetrics.density;
        //For some reason, setting minWidth in xml and then accessing it here doesn't work, returns 0
        int minWidth = 80;
        tabLayout.setMinimumWidth(minWidth);

        //If there are less tabs than needed to necessitate scrolling, set to fixed/fill
        if(tabLayout.getTabCount() < dpWidth/minWidth){
            tabLayout.setTabMode(TabLayout.MODE_FIXED);
            tabLayout.setTabGravity(TabLayout.GRAVITY_FILL);
        }else{
            //Otherwise, set to scrollable
            tabLayout.setTabMode(TabLayout.MODE_SCROLLABLE);

        }

В xml Tablayout просто имеет эти свойства

<android.support.design.widget.TabLayout
    android:id="@+id/sliding_tabs"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:tabMaxWidth="0dp"
    />
person Matt    schedule 14.05.2016
comment
Спасибо @Matt, это помогает мне. - person Sajith Vijesekara; 07.09.2016

Я столкнулся с такой же проблемой.

На мой взгляд, простого решения проблемы не существует. В FIX_MODE все вкладки в макете имеют одинаковую ширину в зависимости от максимального элемента.

А в SCROLL_MODE все вкладки имеют собственную ширину.

Итак. решение становится немного сложным.

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

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

person lirui    schedule 17.07.2015