Емкость / переполнение ActionBar не меняется при изменении ориентации

У меня есть приложение, использующее ActionBar, где я сам обрабатываю изменения ориентации:

android:configChanges="keyboard|keyboardHidden|orientation|screenSize"

... и меню должно помещаться в ActionBar без переполнения в альбомной ориентации, но не в портретной:









При запуске это работает правильно:

Альбомная: wide ActionBar with all items in

Книжная: narrow ActionBar with overflow (да, я могу заставить все элементы всегда отображаться, и они подойдет, как показано ниже, но это может сломаться на меньшем планшете)

Когда эмулятор меняет ориентацию, емкость ActionBar, похоже, не меняется:

Портрет, когда я начинал в альбомной ориентации: {{1} } narrow ActionBar with all items in (это нормально, но непоследовательно)

Альбомная, когда я начинал в портретной ориентации: wide ActionBar with overflow Это выглядит очень глупо, и это причина, по которой я хочу это исправить.

Я добавил этот вызов к invalidateOptionsMenu () , но он не помогает:

@Override
public void onConfigurationChanged(Configuration newConfig)
{
    maybeMoveSomeViewsAround(newConfig);
    super.onConfigurationChanged(newConfig);
    invalidateOptionsMenu();
}

(На самом деле я вызываю его отражением для обратной совместимости, но отладчик сообщает мне, что он действительно вызывается, и выполняет не возникает исключения.)

invalidateOptionsMenu () на самом деле вызывает onCreateOptionsMenu () (который повторно раздувает меню) перед возвратом, и я вижу внутри последнего, что ориентация getResources (). getConfiguration (). уже изменилась. . Так что это действительно озадачивает.Если меню параметров воссоздается, когда ориентация изменилась, это должен быть сам ActionBar, кэширующий ширину?

Есть ли способ воссоздать ActionBar без разрушения / создания Activity? (потому что последний в моем случае немного дороже)

Изменить: Вот минимальный пример проекта , показывающий проблему.

Редактировать 2: Я думал о проверке ширины экрана и программной настройке флагов showAsAction между всегда и никогда надлежащим образом, но для этого нужно знать (или угадывать) ширину каждого элемента. Открытый API ActionBar мне не помогает.

8
задан Chris Boyle 2 October 2011 в 21:15
поделиться