Поведение панели действий, когда Android:targetSdkVersion равен 16
Я пытаюсь реализовать панель действий с вкладками в качестве параметров навигации. Для этого я выбираю опцию "Tabs+Swipe" в разделе "New Blank Activity" мастера "New Android App", как показано ниже.
Теперь в андроиде манифест, когда
android:targetSdkVersion="15"
значение по умолчанию, панель действий выглядит так на эмуляторе Nexus 7/Nexus 7, это желаемый вид приложения
Теперь, когда я изменяю эту строку в манифесте Android на
android:targetSdkVersion="16"
внешний вид панели действий меняется на это
Внешний вид по умолчанию остается для любой версии Android, кроме 16, может кто-нибудь объяснить, почему внешний вид панели действий внезапно меняется, когда targetSdkVersion установлен на 16?
Вышеупомянутое воспроизводимо в эмуляторе так же как на реальном соединении 7.
Полные скриншоты для
Нормальный:
После андроида:targetSdkVersion="16":
Обновление -10 марта 2013 г.: переключен в режим навигации по списку (вместо вкладок), чтобы разрешить переход на Android:targetSdkVersion=17
1 ответ
Причина, по которой он изменяется при установке 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);
}
Однако я подозреваю, что вам нужна не просто причина, а решение. К сожалению, я не могу дать вам простой способ установить только встроенный.
Я могу предложить использовать http://actionbarsherlock.com/, чтобы сделать его согласованным. Бонус к этому - возможность использовать панели действий на старых устройствах. Используя его (портрет), я могу подтвердить, что если вы установите targetSDK на 16, он использует составную компоновку на Jelly Bean, Ice Cream Sandwich, GingerBread и Froyo. По крайней мере, вы сможете разработать свой макет, зная, чего ожидать.
Имейте в виду, что в большинстве случаев при переключении в ландшафтный режим они снова включаются в панель действий, так как для измерения имеется "достаточно места".