目標は、画面レイアウトを「横向き」または「縦向き」に固定し、回転イベントを引き続き受け取ることです。Activity のonConfigurationChanged (Configuration newConfig)については知っていますが、固定レイアウトでは機能しません。これに対処する方法は?より明確に説明するために、Android Camera アプリケーションのような動作を実装したいと考えています。ボタン画像のみを回転させ、アクティビティをリロードせず、レイアウトを変更しません。
EDIT#1: setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE)を呼び出した後、このメソッドが機能しないことを意味します
EDIT#2: はい、onConfigurationChangedは必要なものではありませんでした。代わりに、SensorEventListenerインターフェイスを実装して、onSensorChangedイベントをチェックする必要があります。Get phone orientation but fix screen orientation to portrait
から取得した完全なソリューション:
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"