Подтвердить что ты не робот

Как остановить навигацию по ActionBar Tab для отображения в качестве счетчика, когда он становится слишком длинным?

У меня есть панель действий с навигацией Tab. Во время работы в 3.1 все было в порядке, но как только я установил приложение на устройстве 4.1, вкладки, которые были вынуждены отображаться как счетчик, разрушая мой дизайн макета. Похоже, что вкладки занимают слишком много места (если я удалю некоторые фрагменты, которые выглядят нормально. Есть ли способ остановить это поведение и отобразить навигацию в качестве вкладок снова, как в Android 3.0? Кто-нибудь знает?

спасибо!

4b9b3361

Ответ 1

Я нашел ответ здесь. Чтобы настроить режим навигации ПОСЛЕ добавления вкладок.

Ответ 2

Прежде всего, просто уточнить: это не ошибка, и она работает по назначению. Ссылка эта дискуссия на форумах Google.

Однако я пришел к решению, что если вы переопределите:

<bool name="abs__action_bar_embed_tabs">false</bool> //for ActionBarSherlock
<bool name="android:action_bar_embed_tabs">false</bool> //for default ActionBar

У вас не будет NAVIGATION_MODE_LIST в портретном режиме. Однако у вас не будет встроенных вкладок, и если вы повернуть экран в альбом, он тоже не будет работать. По умолчанию у вас будут встроенные вкладки и, следовательно, NAVIGATION_MODE_LIST на экране с шириной > 480 дп.

Такое поведение происходит (я полагаю), потому что встроенные вкладки ограничены шириной ActionBar, поэтому, если вы переопределяете логическое значение, у него будут вкладки в отдельной строке, и он не рухнет. Но, к сожалению, я не могу объяснить, почему это не работает в ландшафте.

Ответ 4

Как я понимаю, вы должны использовать ViewPager + PagerTitleStrip, если у вас много вкладок и вы хотите, чтобы они прокручивались все время. Вот цитата из ttps://code.google.com/p/android/issues/detail? Id = 24439 # c9:

Если ваш пользовательский интерфейс содержит много вкладок до того момента, когда вы нажмете прокрутку вкладок или случаев краха на прядильщик, вы можете подумать об использовании PagerTitleStrip как индикатор, а не полные вкладки, чтобы представить это информации в менее суматоху. Это может быть особенно полезно, если набор отображаемых вкладок находится под контролем пользователя. Настраиваемые вкладки лучше всего работают, когда есть небольшой, ограниченный набор, например, в приложении YouTube. Скроллинг полоски вкладки теряют доступ одним касанием к любой вкладке, их основное преимущество над простой титульной полосой. Примеры стиля PagerTitleStrip могут можно найти в приложениях Android Market и Google+.

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

Ответ 5

Если вы действительно хотите использовать вкладки и не сворачивать ее с помощью счетчика, это технически возможно с использованием отражения, если вы настраиваете customView для вкладок:

View v = <your custom tab view>;
Tab tab = actionBar.newTab().setCustomView(v);
    do{
       v = (View)v.getParent();                 
    } while (v!=null && !v.getClass().getSimpleName().equalsIgnoreCase("ScrollingTabContainerView"));

if(v!=null) {
    try {
        Method allowCollapse = v.getClass().getDeclaredMethod("setAllowCollapse", new Class[] { Boolean.TYPE });
        allowCollapse.setAccessible(true);
        allowCollapse.invoke(v, new Object[]{ false });                         
    } catch (Exception e) {
    }
}

Если места недостаточно, вкладки будут прокручиваться в ActionBar. Вкладки и любые элементы действия в меню задаются на 1/2 ширины экрана, поэтому вы можете рассчитать, будут ли прокручиваться или нет табуляции, а также вносить корректировки в вкладки, ярлыки элементов меню и т.д. Или заставлять вкладки в сложный режим, чтобы избежать прокрутки... ИЛИ, как было предложено ранее, вместо этого используйте PagerTitleStrip.