У меня есть вкладки настройки, как ОБНОВЛЕНИЕ 29/05/2015 этот пост. На моем мобильном Nexus 4 вкладки занимают всю ширину, а на планшете Nexus 7 - в центре и не покрывают всю ширину экрана.
Скриншот Nexus 7 Скриншот Nexus 4
У меня есть вкладки настройки, как ОБНОВЛЕНИЕ 29/05/2015 этот пост. На моем мобильном Nexus 4 вкладки занимают всю ширину, а на планшете Nexus 7 - в центре и не покрывают всю ширину экрана.
Скриншот Nexus 7 Скриншот Nexus 4
Ответы:
«Более простой» ответ, заимствованный у Кейзи, будет просто добавить
app:tabMaxWidth="0dp"
в вашTabLayout
XML:источник
У меня была та же проблема, и я проверил стиль TabLayout, и я обнаружил, что его стиль по умолчанию
Widget.Design.TabLayout
имеет разные реализации (normal, landscape и sw600dp).Нам нужен планшет для планшетов (sw600dp), который имеет следующую реализацию:
Из этого стиля мы будем использовать tabGravity » (возможные значения «center» или «fill»), используя значение «fill».
Но нам нужно идти глубже, и тогда мы видим, что этот простирается от
Base.Widget.Design.TabLayout
реализации которого:Итак, от этого стиля нам нужно будет переопределить tabMaxWidth ». В моем случае я установил его на
0dp
, поэтому он не имеет ограничений.И мой стиль выглядел так:
И тогда панель вкладок заполнит весь экран из стороны в сторону.
источник
Решение для прокрутки: (TabLayout.MODE_SCROLLABLE), то есть когда вам нужно больше 2 вкладок (Динамические вкладки)
Шаг 1: style.xml
Шаг 2: Ваш макет XML
Шаг 3: В вашей Деятельности / Фрагмент, где у вас когда-либо есть вкладки.
источник
addTab
и установил вес каждой вкладки, как она была добавлена.override fun addTab(tab: Tab, position: Int, setSelected: Boolean) { super.addTab(tab, position, setSelected) allotEachTabWithEqualWidth() }
Чтобы заставить вкладки занимать всю ширину (разделить на равные размеры), примените к
TabLayout
виду следующее:источник
TabLayout
установлено значениеapp:tabMode=“scrollable”
, это приведет к тому, что вкладки станут фиксированной длины (длинные слова будут переноситься), и вкладки больше не будут скользить, по существу делая вкладки «фиксированными» снова.Это полезно, вы должны попробовать
источник
работа для меня Это также есть
xmlns:app="http://schemas.android.com/apk/res-auto"
источник
Для меня следующий код работает и было достаточно.
источник
Проверьте код ниже для решений.
Ниже приведен код макета:
Обратите внимание, что для динамического количества вкладок не забудьте вызвать setTabNumbers (tabcount).
Ссылка взята с https://medium.com/@elsenovraditya/set-tab-minimum-width-of-scrollable-tablayout-programmatics-8146d6101efe
источник
Решение для Scrollable (Котлин)
В xml:
В Котлине:
В моем случае, если менее 3 вкладок, я выделяю равное пространство.
Примечание: если условие согласно вашему требованию
источник
Почему все это беспокойная работа? Просто вставьте
app:tabMode="scrollable"
ваш TabLayout в XML. Это оно.источник
tabLayout.setTabMode(TabLayout.MODE_SCROLLABLE);
Это просто свойство для tabLayout, это не имеет значения, сколько вкладок вы добавляете, статические или динамические.В моем варианте этой проблемы у меня было 3 вкладки среднего размера, которые не занимали всю ширину на планшетах. Мне не нужно было прокручивать вкладки на планшетах, так как планшеты достаточно большие, чтобы отображать вкладки вместе без какой-либо прокрутки. Но мне действительно нужно, чтобы вкладки можно было прокручивать на телефонах, поскольку телефоны слишком малы, чтобы отображать все вкладки вместе.
Лучшим решением в моем случае было добавить
res/layout-sw600dp/main_activity.xml
файл, в котором могла бы бытьapp:tabGravity="fill"
и соответствующая TabLayoutapp:tabMode="fixed"
. Но в моем обычномres/layout/main_activity.xml
я оставилapp:tabGravity="fill"
иapp:tabMode="fixed"
, и имелapp:tabMode="scrollable"
вместо этого.источник
Обратите внимание, что вам также нужно установить
заполнить все пространство
источник