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

アクティビティに onSaveInstanceStateonRestoreInstanceState メソッドを追加し、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で共有していただければ幸いです。

siro:chro 無料ゲーム SQN をリリースしました

img_sqn_00

sirochro 初の無料ゲームアプリ SQN をリリースしました。
記事:SQN: iOS 無料ゲームアプリ SQN - Sequential Numbers をリリース
ちょっとした時間に楽しめる完全無料のゲームなっていますので、是非ダウンロードして遊んでみてください。

↓SQN のダウンロードはこちらから

Related Contents

Pickup Contents