質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

Q&A

解決済

1回答

2055閲覧

【Android】画面回転しているとWebViewが表示されなくなる

takk_014

総合スコア53

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

0グッド

0クリップ

投稿2021/12/08 05:51

閲覧いただきありがとうございます。
スマホの画面回転時にsetContentViewで縦画面or横画面のレイアウト読み込ませるようにしてます。
その際に現在のアクティビティのデータがが消去されてしまう仕様なのでもう一度WebViewを読み込ませて表示させています。
下記がそのコードになります。

kotlin

1 /* 画面回転時の処理 */ 2 @RequiresApi(Build.VERSION_CODES.LOLLIPOP) 3 override fun onConfigurationChanged(newConfig: Configuration) { 4 super.onConfigurationChanged(newConfig) 5 when (newConfig.orientation) { 6 /* 縦画面時の処理 */ 7 Configuration.ORIENTATION_PORTRAIT -> { 8 Log.d("onConfigurationChanged", "ORIENTATION_PORTRAIT") 9 //ステータスバー表示 10 window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_VISIBLE 11 //タイトルバー表示 12 supportActionBar?.show() 13 // 縦画面用レイアウトを読み込み 14 setContentView(R.layout.activity_port) 15 // 新たなレイアウトを読み込んだのでwebviewを再設定(3回目になるとなぜかwebview表示されない) 16 webview = findViewById(R.id.webView_port_id) 17 webview.settings.loadWithOverviewMode = true 18 webview.settings.useWideViewPort = true 19 webview.getSettings().setBuiltInZoomControls(true) 20 webview.getSettings().setDisplayZoomControls(false) 21 webview.loadUrl(streamURL) 22 } 23 /* 横画面時の処理 */ 24 Configuration.ORIENTATION_LANDSCAPE -> { 25 Log.d("onConfigurationChanged", "ORIENTATION_LANDSCAPE") 26 // ステータスバー非表示 27 window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_FULLSCREEN 28 // タイトルバー非表示 29 supportActionBar?.hide() 30 // 横画面用レイアウトを読み込み 31 setContentView(R.layout.activity_land) 32 // 新たなレイアウトを読み込んだのでwebviewを再設定(3回目になるとなぜかwebview表示されない) 33 webview_land = findViewById(R.id.webView_land_id) 34 webview_land.settings.loadWithOverviewMode = true 35 webview_land.settings.useWideViewPort = true 36 webview_land.getSettings().setBuiltInZoomControls(true) 37 webview_land.getSettings().setDisplayZoomControls(false) 38 webview_land.loadUrl(streamURL) 39 } 40 else -> { } 41 } 42 }

しかしこれを実行して、スマホを横画面→縦画面→横画面と交互に表示していくと縦画面3回目にWebViewが表示されなくなります。
表示されなくなるというのはWebViewがあった場所が真っ白になりスクロールバーもない状態の全く何も表示されていない状態を指します。
ログを見ても何もエラーは出ていないです。
横画面3回目も同じく何もWebViewが表示されないです。
それ以降は縦画面・横画面ともにWebViewは何も表示されなくなります。
縦画面時のみボタンを表示するようにしていますがそのボタンは正常に表示されます。

onsaveinstancestateWebViewを保持する必要があると思ったのですが、昔のAndroidとは仕様が変わったのか画面回転してもActivityは保持されていてonsaveinstancestateが呼ばれることもonCreateが呼ばれることもなかったです。

ご教授よろしくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hoshi-takanori

2021/12/08 10:29

setContentView するんだったら Activity ごと作り直した方がすっきりするのでは…。
guest

回答1

0

自己解決

根本的な問題は解決できませんでした。
しかし最終的にやりたいことは横画面時にWebViewを全画面表示するということなので、横画面になったらWebView以外のUIは非表示にして下記コードによってWebViewの大きさと位置を調整することで解決しました。

kotlin

1 // WebViewのサイズを画面サイズと同じにする 2 val wm = getSystemService(WINDOW_SERVICE) as WindowManager 3 val disp = wm.defaultDisplay 4 val params1 = webview.getLayoutParams() 5 params1.height = disp.height 6 params1.width = disp.width 7 webview.setLayoutParams(params1) 8 9 // WebViewの位置を画面の一番左上にする 10 val mlp = params1 as MarginLayoutParams 11 mlp.setMargins(mlp.leftMargin, 0, mlp.topMargin, 0) 12 webview.setLayoutParams(mlp)

投稿2021/12/10 00:11

takk_014

総合スコア53

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問