Я пытаюсь реализовать панель действий с вкладками в качестве параметров навигации. Для этого я выбираю опцию «Tabs + Swipe» в разделе «Новая пустая активность» в мастере «Новое приложение для Android», как показано ниже.
Теперь, в манифесте андроида, когда
android:targetSdkVersion="15"
Который является значением по умолчанию, панель действий выглядит так на эмуляторе Nexus 7 / Nexus 7, это желаемый вид приложения
Теперь, когда я изменяю эту строку в манифесте android
android: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. По крайней мере, вы сможете проектировать свой макет, зная, чего ожидать.
Имейте в виду, что в большинстве случаев переход в ландшафтный режим снова встроит их в панель действий, так как есть «достаточно места», как он измеряет.