Подтвердить что ты не робот

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

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

Tab+Swipe wizard option

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

android:targetSdkVersion="15"

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

Default behavior

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

android:targetSdkVersion="16"

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

Behaviour after 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

4b9b3361

Ответ 1

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

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