Androidのアプリ開発に関する備忘録も書いておこうと思いついたのでちょっと書いてみます。
今までSCREEN_ORIENTATION_NOSENSORで回転を固定していたのですが、いつからか正常に動作しなくなっていました。
回転させると縦横縦横と連続で切り替わり続けてしまうような症状です。
Xperia固有の問題かと思ってArchos5で試したらやっぱり駄目だったのでテストして関数を修正しました。
/** * 画面の回転を固定・解除する関数 * @param flg 真なら回転固定 偽なら回転可能 */ public void setFixedOrientation(Boolean flg){ if(flg){ //this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR); Configuration config = getResources().getConfiguration(); if(config.orientation == Configuration.ORIENTATION_LANDSCAPE){ this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); }else if (config.orientation == Configuration.ORIENTATION_PORTRAIT){ this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); } }else{ //this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR); this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED); } }
NOSENSORが思ったとおりに動作しなかったのですが、SENSORも使わないようにしてあります。
不具合があった場合はUNSPECIFIEDを使わずにSENSORを使ってみたりするといいかもしれません。
こんな感じでまた使えそうなことを書いておけば便利ですね。たぶん
[…] 端末の回転で、縦・横画面に最適なレイアウトを提供したいのですが、上記のようなケースに対応するにはコストがかかり過ぎるなと思いました。で、ふとこう思いました。上記のような、都合の悪い状態では回転させなくてもいいのではないか。どうせ見ているのはAlertDialogかプログレスバーぐらいなのだから。で、それらを閉じたら自動で端末の状態に応じて回転すればいいじゃないか。無理かなーと思いつつ調べたらありました。その方法が。これを使って、都合の悪い状態に入る前に向きを固定し、そこから出たら回転可能に戻しました。僕としてはこれで満足です。AsyncTaskを使っている最中にActivityを再生成して元に戻すコードを書いて大きなバグを作り込むよりはよっぽどいいと思います。とにかく品質第一だし。(UIを良くしてForceCloseさせたら本末転倒、、、って言い訳っぽいなあ。でも僕はこの現実解が好きです。) […]