Поведение панели действий, когда android: targetSdkVersion – 16

Я пытаюсь реализовать панель действий с вкладками в качестве параметров навигации. Для этого я выбираю опцию «Tabs + Swipe» в разделе «Новая пустая активность» в мастере «Новое приложение для Android», как показано ниже.

Вкладка + Мастер прокрутки

Теперь, в манифесте андроида, когда

android:targetSdkVersion="15" 

Который является значением по умолчанию, панель действий выглядит так на эмуляторе Nexus 7 / Nexus 7, это желаемый вид приложения

Поведение по умолчанию

Теперь, когда я изменяю эту строку в манифесте android

 android:targetSdkVersion="16" 

Внешний вид панели действий меняется на этот

Поведение после андроида: targetSdkVersion = "16"

Внешний вид по умолчанию остается для любой версии android, но 16, может ли кто-нибудь объяснить, почему внешний вид панели действий внезапно изменяется, когда для targetSdkVersion установлено значение 16?

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

Полные screengrabs для

Обычный: http://i.stack.imgur.com/VsBA2.png

После андроида: targetSdkVersion = "16": http://i.stack.imgur.com/OM6Y4.png

Обновление – 10 марта 2013 года: переход в режим навигации «Список» (вместо вкладок), чтобы включить переключение на android: targetSdkVersion = 17

Причина, по которой он изменяется при настройке targetSDK на 16, заключается в том, что Google изменил способ измерения вкладок в Jelly Bean. В частности, посмотрите на это в android.internal.view.ActionBarPolicy :

 public boolean hasEmbeddedTabs() { final int targetSdk = mContext.getApplicationInfo().targetSdkVersion; if (targetSdk >= Build.VERSION_CODES.JELLY_BEAN) { return mContext.getResources().getBoolean(R.bool.action_bar_embed_tabs); } // The embedded tabs policy changed in Jellybean; give older apps the old policy // so they get what they expect. return mContext.getResources().getBoolean(R.bool.action_bar_embed_tabs_pre_jb); } 

Однако я подозреваю, что вы не просто хотите причину, но и решение. К сожалению, я не могу дать вам простой способ настроить его только на встроенный.

Тем не менее, я могу предложить использовать ActionBarSherlock, чтобы сделать его непротиворечивым . Бонус к этому – возможность использовать панели действий на старых устройствах. При использовании (портрет) я могу подтвердить, что если вы установите для targetSDK значение 16, он использует сложный макет на Jelly Bean, Ice Cream Sandwich, GingerBread и Froyo. По крайней мере, вы сможете проектировать свой макет, зная, чего ожидать.

Имейте в виду, что в большинстве случаев переход в ландшафтный режим снова встроит их в панель действий, так как есть «достаточно места», как он измеряет.

Intereting Posts
Сила Android Горизонтальная (ландшафтная) компоновка Android: включить внешний баннер в сборку (без Eclipse) Плохой оконный токен, вы не можете показать диалог перед созданием Activity или после его скрытия Доступ к Android Wear Fit Data Как я могу отправить несколько типов данных с помощью Intent.ACTION_SEND_MULTIPLE при использовании shareIntent? Android – Получить время виджета хронометра URL Google Play испортил диалог общего доступа к Facebook Ошибка: Android-генератор: не удается разобрать SDK Получить текущую активность из Application.Context – MonoAndroid Местоположение Android SDK не настроено в настройках в 64-битных Windows Как вставлять и воспроизводить видео на YouTube в андроиде Экономия энергии аккумулятора, потребляемой службами gps в Android Компиляция FFmpeg 3.1.1 для x86 с использованием Android NDK Хранение данных приложений Android на SD-карте Получение недействительного токена доступа «t ype»: «OAuthException», «code»: 190