1

特定のアクティビティについて、Android アプリで方向センサーを完全にオフにする方法を知りたいです。

これが私が苦労しているものです。次のコマンドを使用して、アクティビティの onCreate (または onStart/onResume) メソッドで方向を動的に設定するとします。

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

私が経験したことは、方向センサーに従って横向きモードになるような方法でデバイスを保持すると、画面がディスプレイに表示されるのが著しく速くなることです.

つまり、アクティビティが最初にセンサーが提案する方向にレイアウトを設定したいと考え、その後 setRequestedOrientation メソッドに従って切り替えるように感じます。関連する投稿android-unknown brief orientation change at switch of activity で説明されているように、画面にこれが表示されることもあります。

setRequestedOrientation 呼び出しでは遅すぎるようです。したがって、 setRequestedOrientation 呼び出しの前に方向の設定を回避するために、方向センサーを完全にオフにする方法を考えています。または、代わりに setRequestedOrientation を時間内に呼び出す方法。実行時に決定されるようにこの機能が動的に必要なため (環境設定)、マニフェストで固定された向きを設定できません。

この問題に関するヒントをお寄せいただきありがとうございます。

マーティン

編集:言及するのを忘れました、マニフェストには含まれています

android:configChanges="keyboardHidden|orientation|screenSize"
4

2 に答える 2

0

これは、次のように実行時に向きを設定する方法です

int currentOrientation = getRequestedOrientation();

if (currentOrientation == Configuration.ORIENTATION_LANDSCAPE) {
   setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE);
}
else {
   setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT);
}
于 2012-09-24T14:59:07.003 に答える
0

Android がアクティビティを強制終了し、新しい構成で新しいインスタンスを開始するため、パフォーマンスへの影響が発生します。これに対する適切な解決策は、構成の変更を手動で処理することです。マニフェスト ファイルのアクティビティ要素に android:configChanges="orientation" を追加するアクティビティで onConfigurationChanged メソッドをオーバーライドしてレイアウトを行う

別の解決策は、マニフェストファイルで方向属性を指定することにより、1つは横向きでのみ動作し、もう1つは縦向きで動作し、適切なものをランチします。

于 2012-09-24T14:40:27.683 に答える