Диалог не должен закрываться при изменении ориентации экрана

Я создал настраиваемую вкладку, которая имеет два разных рисунка для портретной и альбомной ориентации. Значки для портретного экрана находятся под drawable-hdpi, а изображения для альбомной ориентации — под drawable-land-hdpi. На данный момент я внес изменение конфигурации в манифест, чтобы сохранить видимость диалогового окна.

android:configChanges="orientation"

Всякий раз, когда отображается диалоговое окно и пользователь меняет ориентацию с портретной на альбомную, диалоговое окно по-прежнему отображается, но изображения, которые он использует во вкладке, предназначены для портретного режима. Вот почему макет выглядит неправильно, поскольку он не использовал чертежи для ландшафта. Может ли кто-нибудь помочь мне с этим? Спасибо.


person iamtheexp01    schedule 06.05.2011    source источник


Ответы (3)


Если вы используете android:configChanges="orientation", Android не воссоздает действие при изменении ориентации. Если вы не хотите, чтобы диалог закрывался, просто используйте метод Activity.showDialog(). И если вы все еще хотите использовать android:configChanges="orientation", вам нужно вручную изменить чертежи в методе Activity.onConfigurationChanged().

person Michael    schedule 06.05.2011
comment
Я не хочу устанавливать макет вручную в onConfigurationChanged, потому что думаю, что есть лучшая альтернатива. Если я использую showDialog(), будет ли это гарантировать, что даже если я изменю ориентацию, он не будет отклонен? - person iamtheexp01; 06.05.2011
comment
Когда вы используете метод Activity.showDialog(), активность управляет этим диалогом: закрывает его и создает заново. - person Michael; 06.05.2011
comment
Действительно, но моя проблема заключается в макете, он не использовал альбомный макет вкладки. Могу ли я объединить использование android:configChanges=orientation, создание /res/layout-land/main.xml и /drawable-land-hdpi? - person iamtheexp01; 06.05.2011
comment
Вам не нужно менять файл макета. Android будет использовать /res/layout-land/main.xml. Вы должны изменить только те ресурсы, которые необходимо отобразить другим способом. Вы можете прочитать об этом здесь: developer.android.com/guide /темы/ресурсы/. - person Michael; 06.05.2011

Добавьте подобное в свой тег активности в файле manifest.xml приложения.

<activity android:label="@string/app_name" android:configChanges="keyboardHidden|orientation|screenSize" android:name=".your.package"/>
person Deepak    schedule 19.06.2013

Вы можете выполнить пользовательскую реализацию макета, определив режим ориентации, как показано ниже:

@Override
public void onConfigurationChanged(Configuration config) 
{
    super.onConfigurationChanged(config);

    if(config.orientation == Configuration.ORIENTATION_LANDSCAPE)
        Log.i("orientation", "Orientation changed to: Landscape");
    else
        Log.i("orientation", "Orientation changed to: Portrait");
}
person i18n    schedule 10.05.2014