Я уже некоторое время пытаюсь понять это, но безуспешно. Вот что мне нужно сделать. Мой дизайнер хочет макет вкладки, который может охватывать весь заданный контейнер. Один из способов добиться этого - создать TabLayout с атрибутом app:tabMode="fixed"
. Дизайнер хочет, чтобы индикатор вкладки под ним не превышал 5 dp после каждого края текста на вкладке, что можно сделать с помощью
<android.support.design.widget.TabLayout
android:id="@+id/tabs"
android:layout_width="match_parent"
android:layout_height="40dp"
android:background="@color/bpWhite"
android:textAllCaps="true"
app:tabPaddingStart="5dp"
app:tabPaddingEnd="5dp"
app:tabMinWidth="0dp"
app:tabIndicatorColor="@color/accent"
app:tabIndicatorHeight="4dp"
app:tabGravity="fill"
app:tabMode="scrollable">
Проблема в том, что при установке режима вкладок на прокручиваемый вид индикатора выглядит так, как мне нужно, но теперь я теряю равный интервал между каждой вкладкой. В идеале я хочу сделать что-то вроде этого:
<TextView android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<!-- Dynamic Spacer -->
<View android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"></View>
<TextView android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<!-- Dynamic Spacer -->
<View android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"></View>
<TextView android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<!-- Dynamic Spacer -->
<View android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"></View>
Выходя из документа TabLayout https://developer.android.com/reference/android/support/design/widget/TabLayout
Я могу раздуть пользовательский вид, который в этом случае мне не поможет, потому что добавив туда разделитель, индикатор подчеркнет разделитель. Я также могу добавить только TabItems в XML-контейнер TabLayout, поэтому не могу вставлять туда и проставки.
Похоже, что мой единственный вариант - создать собственную версию TabLayout, которая оборачивает индикатор вкладки только до длины текста вкладки (плюс отступы) и вставляет мертвые разделители между каждой вкладкой, поэтому я обрабатываю только сенсорные события на четном числе интервалы (например, вкладки [0], вкладки [2], вкладки [4]). Пожалуйста, скажите мне, что я ошибаюсь по этому поводу, потому что я действительно боюсь специального решения для этого.
TLDR; Мне нужен TabLayout, в котором индикатор переносится по ширине текста вкладки, в то же время динамически заполняя поля между вкладками, чтобы создать равномерно расположенную разметку при любом размере экрана. tabMode:"scrollable"
дает мне нужную оболочку индикатора, но не равный интервал между вкладками, а tabMode:"fixed"
дает мне пространство между нужными вкладками, но индикатор охватывает всю ширину, а не переносится на текст.
Желаемый конечный результат таков: