ウィキペディアのページを読めるアプリを作っています。
電話を縦向きから横向きに、またはその逆に回転させるたびにアイコンを表示したい。ユーザーが必要に応じて画面の向きをロックできるようにします。そうでない場合は、センサーデータに従って画面の向きをロックします。これは、GooglePlayの一部のアプリによって実装されている機能です。たとえば-Pocket
これを行うには、私はオーバーライドしました
public void onConfigurationChanged(Configuration newConfig)
ここで、(orientation_dirは共有設定に保存されている方向の値であり、コードをデバッグしたので正しい)を使用してロックされた構成を設定している場合。
if(orientation_dir == Configuration.ORIENTATION_LANDSCAPE)
{
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE);
}
else if(orientation_dir == Configuration.ORIENTATION_PORTRAIT)
{
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT);
}
次に、向きは正しく設定されますが、電話が回転したときにonConfigurationChanged()メソッドは呼び出されません。
このように向きを設定すると
if(orientation_dir == Configuration.ORIENTATION_LANDSCAPE)
{
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
}
else if(orientation_dir == Configuration.ORIENTATION_PORTRAIT)
{
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);
}
その場合、目的の方向が設定されません。電話はセンサーデータに従って向きをリセットします。
設定が間違っているのではないかと思ったので、メソッドでスーパーを呼び出さなくても試しましたが、「スーパーが呼び出されません」という例外が発生します。
私は過去2日間試していますが、この問題の解決策はありません。