私はアクティビティを持っています。このアクティビティはポートレートモードまたはランドスケープモードで動作します。ランドスケープモードでは、新しいレイアウトをロードしてグラフを表示します。 が向きを検出するために、私は私のマニフェストにこれを設定:それは完璧に動作オリエンテーションを無効にしますがオリエンテーションを検出します
android:screenOrientation="sensor" android:configChanges="orientation"
、私は自分の携帯電話を反転するときので、新しいレイアウトがロードされています。しかし、lanscapeモードでは、ボタンを使って回転を無効/有効にすることができます(スイッチャーです)。
私はこのコードを書いた:
public void onConfigurationChanged(Configuration pNewConfig) {
Log.v(DEBUG_TAG, "Current configuration changes");
if (pNewConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
Log.v(DEBUG_TAG, "Screen orientation : LANDSCAPE");
if (pNewConfig.orientation != mCurrentOrientation) {
initTestLandscape();
mCurrentOrientation = pNewConfig.orientation;
}
} else {
Log.v(DEBUG_TAG, "Screen orientation : PORTRAIT");
if (!mIsLandscapeLocking
&& pNewConfig.orientation != mCurrentOrientation) {
initTestPortrait();
mCurrentOrientation = pNewConfig.orientation;
}
}
super.onConfigurationChanged(pNewConfig);
}
このコードは動作しますが、ユーザーはランドスケープモードで、ポートレートモードでバックアップする携帯電話を反転させ、ロックがオンのとき、lanscapeレイアウトはポートレートモードで反転します私はそれを望んでいない!
私は
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
を追加しましたが、このコードはonConfigurationChanged方法を無効にし、ユーザーが再び電話を反転させた場合、私は検出できない...
あなたは私を助けることができますか?
である必要があり、変更後の
を...私は(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE)setRequestedOrientationを呼び出します。ユーザーがビューをロックしてsetRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR)を呼び出すと、ユーザーがロックを解除すると...簡単ですが、どうすればこの解決策は考えられませんか?不都合な点についてお詫び申し上げます。 – FinalSpirit
注目すべき点は、自分のために提供したソリューションは、ビューが左側ではなく右側に回転している間にユーザーがロックしても、奇妙な動作をするということです。片側だけを意味する 'SCREEN_ORIENTATION_LANDSCAPE'にロックしているので、ビューは逆さまになります。あなたはそれを横向きに保持する 'SCREEN_ORIENTATION_SENSOR_LANDSCAPE'を望んでいるかもしれませんが、ユーザが電話機/タブレットの反対側に切り替えると、デバイスからセンサを聞きます。 – SDJMcHattie
はい、SCREEN_ORIENTATION_LANDSCAPEの代わりにSCREEN_ORIENTATION_SENSOR_LANDSCAPEを使用する必要がありますが、このトピックを投稿すると、私はSCREEN_ORIENTATION_SENSOR_LANDSCAPEをサポートしていないAndroid 8にありました – FinalSpirit