16

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

Вот скриншот, чтобы лучше объяснить мою проблему: enter image description here

В случае деталь очень важна, я использую Design Support TabLayout, а ViewPager и FragmentPagerAdapter для заполнения моих закладок.

Заранее благодарен!

+1

Если вы увидите в TabLayout, будет постоянный закрытый статический окончательный int MAX_TAB_TEXT_LINES = 2; и в TabView (LinearLayout) есть текстовое представление с максимальными строками, установленными в textView.setMaxLines (MAX_TAB_TEXT_LINES);
Таким образом, вы можете предоставить свой пользовательский вид вкладке, установленной на максимальную линию, и он будет эллипсироваться в конце. т.е. tabLayout.addTab (tabLayout.newTab(). setCustomView (View v) –

+0

@Adam Вы получаете решение? – Akshay

ответ

10

Вы можете изменить размер шрифта или другой Params из tabLayout в styles.xml. Например:

<style name="Base.Widget.Design.TabLayout" parent="android:Widget"> 
     <item name="tabMaxWidth">@dimen/tab_max_width</item> 
     <item name="tabIndicatorColor">?attr/colorAccent</item> 
     <item name="tabIndicatorHeight">2dp</item> 
     <item name="tabPaddingStart">12dp</item> 
     <item name="tabPaddingEnd">12dp</item> 
     <item name="tabBackground">?attr/selectableItemBackground</item> 
     <item name="tabTextAppearance">@style/AppTheme.TextAppearance.Design.Tab</item> 
     <item name="tabSelectedTextColor">?android:textColorPrimary</item> 
    </style> 

    <style name="AppTheme.TextAppearance.Design.Tab" parent="TextAppearance.AppCompat.Button"> 
     <item name="android:textSize">12sp</item> 
     <item name="android:textColor">?android:textColorSecondary</item> 
     <item name="textAllCaps">true</item> 
    </style> 
+0

Спасибо за ответ Dmitriy, это проливает некоторый свет на мою проблему. Изменение размера текста исправит мою непосредственную проблему, но я задаюсь вопросом, устраняет ли это проблему для всех устройств. Я хочу, чтобы вкладки на устройствах всех размеров и разрешений занимали только одну строку. Вы знаете, есть ли способ заставить компоновку вкладок соответствовать содержимому вкладки на одну строку? – Adam

+0

Я не знаю о singleLine, как paramertre textView, но вы можете добавить поддержку для разных устройств. Для textSize вы можете написать значение из файлов dimen.xml разных макетов. Смотрите это http://developer.android.com/intl/ru/guide/topics/resources/more-resources.html#Dimension –

21

у вас установлено:

<android.support.design.widget.TabLayout 
    .. 
    app:tabMode="scrollable" /> 
+0

, устанавливая его для прокрутки, устанавливает его на одну строку, но теперь вкладки не равномерно распределены. исправить это? – Adam

+1

Привет, Адам, фактическое решение вашего вопроса выше от Дмитрия Чернова - однако изменение размера текста не соответствует Руководству по материалам - https://www.google.com/design/spec/components/tabs.html # tabs-usage выглядит конкретно под содержимым субтитров. Он утверждает, что он обернут двумя строками или имеет прокручиваемые вкладки (в соответствии с предложением). Ответ, который я дал, соответствует рекомендациям и сохраняет текст на одной строке. Вы можете попробовать: app: tabMinWidth = "dp value" в XML-методе TabLayout и поиграть со значением dp, которое соответствует вашему самому большому табуляции –

+0

именно то, что я искал, спасибо! – Roman

0

Обновление библиотеки для поддержки проектов в 23.1.0. Они исправили эту проблему, но ваш размер текста тоже изменился

+0

Размер текста по коду не работает в 23.1.0, но вы можете установить его через styles.xml, как это сделал Дмитрий Чернов – JeremyDay

Смежные вопросы