画面回転で苦労した話(原因はわかった)
画面を回転させると、なぜかレイアウトが崩れてしまう。
https://qiita.com/QiitaD/items/7d405e93f39a4a3c9d95 などを参考にさせていただいて、ちゃんと縦用の画面と横用の画面を作って、それぞれ layout と layout-land のフォルダに入れているのに、縦で立ち上げた画面を回転させても横用の画面にならず、縦用のレイアウトを無理やり横に合わせた形になってしまう。その逆も同じ。横で立ち上げた画面を縦にするときもうまくいかない。つまり、レイアウトの切り替えをやってくれないのである。その理由がわからず、ずいぶん悩んだ。
今度やっとその原因がわかったのだが、画面回転を検知するための設定に問題があった。具体的には、マニフェストの当該Activityに "android:configChanges="orientation|screenSize" を追記したとき、この問題が起きるようだ。
原因はわかったがまだ問題は残る。上記の追記は画面回転を検知するためには必要。
今回は、アプリの立ち上げ時にメッセージを出すにあたって、画面回転するたびに同じメッセージが出てはうるさいので、回転の後すぐはそれが出ないようにするために、この機能を使っていたのだった。
しかしこれをやると、画面のレイアウトが崩れてしまう・・・この両立をする方法はないのか。
(ちなみに、無理やり縦用と横用のレイアウトに違う名前を付けて、アクティビティ上で画面の向きを検知して 、 縦の時はsetContentView(縦用レイアウト)、横の時はsetContentView(横用レイアウト)としてみたが、 やはりレイアウトは切りかわらなかった。)
参考までに、画面回転の検知には、上記の追加を行ったうえで、以下のようなコードを AppCompatActivityの中に書く。この場合、画面が回転したらsharedPreferenceの"Rotated"がtrueになるので検知できる。
画面回転を検知する方法については、 https://karat5i.blogspot.com/2014/11/blog-post_16.html https://karat5i.blogspot.com/2014/11/blog-post_16.html などを参考にさせていただきました。
なお、画面の向きを検知するだけなら、マニフェストに追記の必要はなく、上記の問題を回避できるみたいで、 https://qiita.com/niusounds/items/74ade5e5a446869dcc8b にある方法は使える。
今度やっとその原因がわかったのだが、画面回転を検知するための設定に問題があった。具体的には、マニフェストの当該Activityに "android:configChanges="orientation|screenSize" を追記したとき、この問題が起きるようだ。
原因はわかったがまだ問題は残る。上記の追記は画面回転を検知するためには必要。
今回は、アプリの立ち上げ時にメッセージを出すにあたって、画面回転するたびに同じメッセージが出てはうるさいので、回転の後すぐはそれが出ないようにするために、この機能を使っていたのだった。
しかしこれをやると、画面のレイアウトが崩れてしまう・・・この両立をする方法はないのか。
(ちなみに、無理やり縦用と横用のレイアウトに違う名前を付けて、アクティビティ上で画面の向きを検知して 、 縦の時はsetContentView(縦用レイアウト)、横の時はsetContentView(横用レイアウト)としてみたが、 やはりレイアウトは切りかわらなかった。)
参考までに、画面回転の検知には、上記の追加を行ったうえで、以下のようなコードを AppCompatActivityの中に書く。この場合、画面が回転したらsharedPreferenceの"Rotated"がtrueになるので検知できる。
override fun onConfigurationChanged(newConfig: Configuration) { super.onConfigurationChanged(newConfig) val sharedPref = getSharedPreferences("sharedPref", MODE_PRIVATE) sharedPref.edit().putBoolean("Rotated",true).apply() }
画面回転を検知する方法については、 https://karat5i.blogspot.com/2014/11/blog-post_16.html https://karat5i.blogspot.com/2014/11/blog-post_16.html などを参考にさせていただきました。
なお、画面の向きを検知するだけなら、マニフェストに追記の必要はなく、上記の問題を回避できるみたいで、 https://qiita.com/niusounds/items/74ade5e5a446869dcc8b にある方法は使える。
コメント
コメントを投稿