Можете ли вы сделать прокручиваемую вкладку с равным интервалом между каждой вкладкой - PullRequest
0 голосов
/ 28 августа 2018

Я уже некоторое время пытаюсь понять это, но безуспешно. Вот что мне нужно сделать. Мой дизайнер хочет макет вкладки, который может охватывать весь заданный контейнер. Один из способов добиться этого - создать 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" дает мне пространство между нужными вкладками, но индикатор охватывает всю ширину, а не переносится на текст.

Желаемый конечный результат таков:

enter image description here

...