Как предотвратить перенос заголовков на вкладках Android в середине слова?

У меня есть макет с несколькими вкладками. Что происходит, так это то, что в альбомной ориентации макет обтекает текст, используемый в заголовках вкладок, но не по словам, а по середине слова! Итак, заголовок типа:

Description  

в портрете выглядит нормально, а вот в ландшафте выглядит так:

Desc  
ript  
ion

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


person Eno    schedule 23.03.2011    source источник


Ответы (4)


Поздний ответ, но Google привел меня сюда, так что это все еще может быть полезно.

Вы можете прокручивать вкладки, что, я считаю, предпочтительнее, чем изменение размера шрифта.

приложение:tabMode="scrollable"

<android.support.design.widget.TabLayout
        android:id="@+id/tablayout_id"
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        app:tabMode="scrollable"
        >
person RedHotPawn.com    schedule 25.08.2016

  • Используете ли вы один и тот же файл макета для альбомной и портретной ориентации?
  • Установлена ​​ли ширина ваших вкладок на wrap_content?
  • Попробуйте установить singleLine="true" в тексте вкладки
  • Увеличивается ли ширина изображения вкладки при изменении на альбомную ориентацию?
  • Используете ли вы собственный фон на вкладках, и если да, то это девять патчей?

Хотя я обычно использую RadioGroup и FrameLayout для создания вкладок, потому что они обеспечивают больший контроль (вы не можете изменить полосу вкладок, которую можно рисовать до версии 2.2, и с помощью этого метода ваши вкладки могут быть отделены от содержимого вкладок, поэтому вы можете поместить либо где угодно).

person Joseph Earl    schedule 23.03.2011
comment
1. Нет, альбомная раскладка немного отличается, поэтому это отдельный файл. Однако хост табуляции один и тот же, и в обоих случаях вкладки добавляются программно (с помощью TabSpec и т. д.) — один и тот же код выполняется как для портретного, так и для ландшафтного режима. - person Eno; 23.03.2011
comment
2. Да, для вкладок установлено значение wrap_content. - person Eno; 23.03.2011
comment
3. Протестировал это. Да, это останавливает перенос, но на самом деле я делаю его, потому что некоторые заголовки вкладок состоят из › 1 слова. Перенос слов отлично работает в портретной ориентации. - person Eno; 23.03.2011
comment
4. Трудно сказать (макет немного отличается, хотя окно шире в альбомной ориентации) - поможет ли просмотрщик иерархии проверить ширину? - person Eno; 23.03.2011
comment
5. Да, мы используем селектор с 9-патч-изображениями для состояний. - person Eno; 23.03.2011
comment
Хорошо, тогда: 1) Попробуйте изменить/удалить поля содержимого из вашего 9-патча (чтобы увидеть, не виновато ли ваше изображение) 2) Удалите альбомный макет и протестируйте его с портретным макетом в альбомной ориентации - если кнопки изменяются. размер правильно на этот раз это ваш файл макета 3) Да, вы можете использовать Hierarchy Viewer и Pixel Perfect - person Joseph Earl; 23.03.2011
comment
1. Удаление некоторых отступов с вкладок немного помогло. - person Eno; 23.03.2011
comment
2. К сожалению, ландшафт другой, поэтому нам нужно сохранить его. - person Eno; 23.03.2011

Хорошо, нам удалось это исправить. Пришлось уменьшить размер шрифта на 1 pt и уменьшить отступы слева и справа на вкладках. Мы также заметили, что в альбомной ориентации все вкладки были одинакового размера, а в портретной — нет, поэтому очевидно, что где-то у нас был fill_parent вместо wrap_content. Исправление работает как для 7-дюймовых, так и для 10-дюймовых планшетов. Спасибо за помощь.

person Eno    schedule 23.03.2011

Вы можете управлять этим с помощью

Переопределить этот класс в проекте ActionBarSherlock ./ActionbarSherlock/src/com/actionbarsherlock/internal/widget/ScrollingTabContainerView.java

@Override
public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    super.onMeasure(widthMeasureSpec, heightMeasureSpec);

    if (mParent.mMaxTabWidth > 0 && getMeasuredWidth() > mParent.mMaxTabWidth) {

        //comment this line

       // super.onMeasure(MeasureSpec.makeMeasureSpec(mParent.mMaxTabWidth, MeasureSpec.EXACTLY),heightMeasureSpec);

       //now do nothing , override by me for ActionBarTabs not rezize never
      //this method manage the size tabs, if you want you can count caracters to resize the size width
    }
}
person luizfelipetx    schedule 10.04.2014