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

Я пытаюсь реализовать панель действий с вкладками в качестве параметров навигации. Для этого я выбираю опцию "Tabs+Swipe" в разделе "New Blank Activity" мастера "New Android App", как показано ниже.

Опция Tab + Swipe wizard

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

android:targetSdkVersion="15"

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

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

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

android:targetSdkVersion="16"

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

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

Внешний вид по умолчанию остается для любой версии 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. По крайней мере, вы сможете разработать свой макет, зная, чего ожидать.

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