Ответ 1
Я нашел ответ здесь. Чтобы настроить режим навигации ПОСЛЕ добавления вкладок.
У меня есть панель действий с навигацией Tab. Во время работы в 3.1 все было в порядке, но как только я установил приложение на устройстве 4.1, вкладки, которые были вынуждены отображаться как счетчик, разрушая мой дизайн макета. Похоже, что вкладки занимают слишком много места (если я удалю некоторые фрагменты, которые выглядят нормально. Есть ли способ остановить это поведение и отобразить навигацию в качестве вкладок снова, как в Android 3.0? Кто-нибудь знает?
спасибо!
Я нашел ответ здесь. Чтобы настроить режим навигации ПОСЛЕ добавления вкладок.
Прежде всего, просто уточнить: это не ошибка, и она работает по назначению. Ссылка эта дискуссия на форумах 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, поэтому, если вы переопределяете логическое значение, у него будут вкладки в отдельной строке, и он не рухнет. Но, к сожалению, я не могу объяснить, почему это не работает в ландшафте.
Извините, но вы не можете остановить это. По словам Google, это функция, а не ошибка. См.: http://code.google.com/p/android/issues/detail?id=24439
Как я понимаю, вы должны использовать ViewPager + PagerTitleStrip, если у вас много вкладок и вы хотите, чтобы они прокручивались все время. Вот цитата из ttps://code.google.com/p/android/issues/detail? Id = 24439 # c9:
Если ваш пользовательский интерфейс содержит много вкладок до того момента, когда вы нажмете прокрутку вкладок или случаев краха на прядильщик, вы можете подумать об использовании PagerTitleStrip как индикатор, а не полные вкладки, чтобы представить это информации в менее суматоху. Это может быть особенно полезно, если набор отображаемых вкладок находится под контролем пользователя. Настраиваемые вкладки лучше всего работают, когда есть небольшой, ограниченный набор, например, в приложении YouTube. Скроллинг полоски вкладки теряют доступ одним касанием к любой вкладке, их основное преимущество над простой титульной полосой. Примеры стиля PagerTitleStrip могут можно найти в приложениях Android Market и Google+.
Я бы не рекомендовал использовать трюки, поскольку никто не гарантирует, что трюки будут работать стабильно.
Если вы действительно хотите использовать вкладки и не сворачивать ее с помощью счетчика, это технически возможно с использованием отражения, если вы настраиваете 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.