Android: WebView 画面回転(Portrait / Landscape)に対応する
Android Studio で WebView を表示し、画面の回転に対応させた場合、何もしない状態のままではアプリが落ちる、もしくは WebView がリロードされてしまいます。
Android アプリの場合、画面が回転した際に一旦 Activity が破棄されてしまい、Activity のメンバ変数や onCreate で生成したインスタンス等が再度生成されてしまうため、このような問題が発生します。
今回はこの問題を解決する、以前の WebView の画面を保持したまま画面を回転させる方法 を説明したいと思います。
目次
- AndroidManifest.xml
- MainActivity.java
WebView を画面回転(Portrait / Landscape)に対応する
AndroidManifest.xml
マニフェストの activity に configChanges… の1行を加えます。
<activity android:name="androidName"
android:label="@string/appName"
android:configChanges="keyboardHidden|orientation|screenSize">
MainActivity.java
アクティビティに onSaveInstanceState と onRestoreInstanceState メソッドを追加し、onCreate で WebView を生成、savedInstanceState に以前の状態が保存されていれば、WebView を復元する条件を追加します。
以上で、MainActivity が破棄されるタイミングで onSaveInstanceState がコールされ、WebView の状態が保存されます。
MainActivity のコードは以下のようになります。
public class MainActivity extends Activity {
private WebView myWebView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myWebView = (WebView)findViewById(R.id.myWebView);
if(savedInstanceState != null){
((WebView)findViewById(R.id.myWebView)).restoreState(savedInstanceState);
return;
}
myWebView.loadUrl("http://sirochro.com/");
}
@Override
protected void onSaveInstanceState(Bundle outState) {
((WebView)findViewById(R.id.myWebView)).saveState(outState);
}
@Override
public void onRestoreInstanceState(Bundle outState){
super.onSaveInstanceState(outState);
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
}
}
Android Studio のエミュレータ上で、デバイスを回転させて結果を確認したい場合は こちら を参考にしてください。
まとめ
今回説明した内容は Activity が破棄されたタイミングで、ビューの状態を保存しているので、ここら辺の Android 特有の仕組みをしっかりと理解していれば、色々と応用がききそうです。
この記事がみなさんのお役に立ちましたら、下記「Share it」よりブックマークやSNSで共有していただければ幸いです。