Как получать события onConfigurationChanged (Android SDK)

Цель состоит в том, чтобы исправить расположение экрана как "ландшафт" или "портрет" и продолжать получать события поворота. Я знаю о onConfigurationChanged (Configuration newConfig) в Activity, но он не работает с фиксированными макетами. Как с этим бороться? Чтобы объяснить более четко, я хочу реализовать поведение, подобное в приложении Android Camera - вращать только изображения кнопок, но не перезагружать действия и не менять макет.

РЕДАКТИРОВАТЬ #1: я имею в виду, что этот метод не работает после вызова setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE)

РЕДАКТИРОВАТЬ #2: Да, onConfigurationChanged не то, что мне нужно. Вместо этого следует реализовать интерфейс SensorEventListener и проверить наличие событий onSensorChanged.
Полное решение, взятое из Получите ориентацию телефона, но установите ориентацию экрана в портрет:

public class MainActivity extends Activity implements SensorEventListener {
int orientation = -1;
@Override
public void onSensorChanged(SensorEvent event) {
    if (event.values[1] < 6.5 && event.values[1] > -6.5) {
        if (orientation != 1) {
        Toast toast = Toast.makeText(getApplicationContext(), "LANDSCAPE", Toast.LENGTH_SHORT); 
        toast.show(); 
    }
    orientation = 1;
    } else {
        if (orientation != 0) {
        Toast toast = Toast.makeText(getApplicationContext(), "PORTRAIT", Toast.LENGTH_SHORT); 
        toast.show(); 
        }
    orientation = 0;
    }
}

И это прекрасно работает с настройкой AndroidManifest для вашей деятельности:

android:screenOrientation="landscape"

1 ответ

Вы должны заявить об этом в файле манифеста вашего проекта.

    <activity
        android:name="your_activity_name"
        android:configChanges="orientation" >
    </activity>

И переопределить метод

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

в вашем классе деятельности.

Другие вопросы по тегам