Как получать события 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);
}
в вашем классе деятельности.