Как использовать onConfigurationChanged() и newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE в android 2.3.3

Я использую onConfigurationChanged(). В этом случае, когда я перехожу из LandScape в Portrait, он вызывает if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) и переходит в Portrait из LandScape. Но когда я перехожу из "Портрет" в "Land-Scape", он не меняется на LandScape, потому что он вызывает if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE), поэтому он не меняется с LandScape на Portrait. Пожалуйста, помогите.

public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);

        //int orientation = this.getResources().getConfiguration().orientation;

        if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) {
            Log.d("Entered to change as Portrait ","PPPPPPPPPPPPPPPPP");
            setContentView(R.layout.settings);
        } else if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
            Log.d("Entered to change as LandScape ","LLLLLLLLLLLLLLLLLLLL");
            setContentView(R.layout.settings);
        }

    }

Ответ 1

Просто напишите приведенный ниже код в onConfigurationChanged метод и тест

if(newConfig.orientation==Configuration.ORIENTATION_LANDSCAPE){

    Log.e("On Config Change","LANDSCAPE");
}else{

    Log.e("On Config Change","PORTRAIT");
}

и напишите android:configChanges="keyboardHidden|orientation" в ваш наиболее показательный файл, как этот

<activity android:name="TestActivity"
           android:configChanges="keyboardHidden|orientation">

он работает на моей стороне, я надеюсь, что это поможет вам.

Если вы на планшете также добавьте |screenSize в android:configChanges

Ответ 2

вы также должны знать:

Внимание: начиная с Android 3.2 (уровень API 13), размер экрана "также изменяется, когда устройство переключается между портретным и ландшафтным ориентации. Таким образом, если вы хотите предотвратить перезагрузки во время выполнения из-за изменение ориентации при разработке для уровня API 13 или выше (как объявленные атрибутами minSdkVersion и targetSdkVersion), вы должен включать значение" screenSize "в дополнение к" ориентации ", стоимость. То есть, вы должны декалировать андроид: configChanges =" ориентация | Размер экрана". Однако, если ваш приложение нацеливается на уровень API 12 или ниже, тогда ваша деятельность всегда обрабатывает это изменение конфигурации (это изменение конфигурации не перезапускает вашу активность, даже при работе на Android 3.2 или более высокое устройство).

Ответ 3

Проблема связана с android:configChanges="orientation|keyboardHidden".

если вы удаляете |keyboardHidden из файла androidmanifest.xml, тогда onConfigurationChanged запускается только при повороте с пейзажа на портрет, а не при переходе от портрета к пейзажу (по крайней мере, в эмуляторе по умолчанию).

Надеюсь, что это поможет.

Ответ 4

Запишите эту строку в файле андроида Manifest.xml:

<activity
  android:name="MyActivity"
  android:configChanges="orientation|keyboardHidden" />

Ответ 5

В дополнение к приведенным выше ответам: Если вы переопределите метод onConfigurationChanged в сочетании с обновлением файла манифеста, вы говорите, что вы сами обрабатываете configurationchanges. Поэтому добавление:

setContentView(R.layout.layout.xml);

В вашем методе onConfigurationChanged - где макет - ваш файл макета - исправит проблему.