onConfigurationsChanged не вызывает первый раз при разблокировке устройства - PullRequest
0 голосов
/ 29 июня 2018

Я работаю над приложением, которое изменяет часть макета в зависимости от ориентации устройства. Я использую

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);

для автоматического поворота моей активности на основе датчика устройства. Мой onConfigurationsChanged метод

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

    if (controllerView != null) {
        if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
            // Load Landscape Layout 
        } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) {
            // Load Portrait Layout
        }
    }
}

AndroidManifest:

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

Проблема:

onConfigurationsChanged работает нормально каждый раз, когда меняется ориентация устройства, но проблема в том, что, скажем, устройство находится в режиме альбомной ориентации, и я блокирую экран, затем, когда я снова разблокирую экран, устройство автоматически переключается в портретный режим, если я поворачиваю устройство, чтобы включить альбомную ориентацию. В этом режиме экран поворачивается, но onConfigurationsChanged () не вызывается, поэтому в альбомном режиме отображается портретный режим.

1 Ответ

0 голосов
/ 29 июня 2018

Если у вас разные макеты для разных ориентаций, у вас должно быть your_activity_layout.xml файлов в папках layout и layout-land.

layout/your_activity_layout.xml -> для портретного режима;

layout-land/your_activity_layout.xml -> для ландшафтного режима;

Кроме того, setContentView(R.layout.your_activity_layout) должен быть записан только внутри onCreate метода действия, под super.onCreate(savedInstanceState)

Наконец, вы должны удалить android:configChanges="keyboardHidden|orientation|screenSize" из своего манифеста, чтобы позволить MyActivity пересоздавать себя при каждом изменении ориентации.

После этого каждый раз, когда вызывается метод onCreate (он вызывается после каждого изменения ориентации), R.layout.your_activity_layout подходит для текущей ориентации.

...