FragmentのwebViewでshouldOverrideUrlLoadingに苦労したので、メモとして残します。
URL遷移時にこのメソッドに入ってきます。
今回はurlの内容によって画面の縦横を固定しました。
【Kotlin】
ModalFragment.kt
package com.example.
import android.content.pm.ActivityInfo
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.webkit.WebView
import android.webkit.WebViewClient
import androidx.fragment.app.Fragment
class ModalFragment : Fragment() {
lateinit var webView: WebView
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?,
): View {
val v: View = inflater.inflate(R.layout.fragment_modal, container, false)
activity?.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
WebView.setWebContentsDebuggingEnabled(true)
webView = v.findViewById<View>(R.id.web_view) as WebView
true.also { webView.settings.javaScriptEnabled = it } //jsを有効に
(activity as? MainActivity)?.let { activity ->
webView.addJavascriptInterface(WebAppInterface(activity), "Android")
webView.settings.javaScriptEnabled = true
webView.webViewClient = object : WebViewClient() {
override fun shouldOverrideUrlLoading(view: WebView, url: String): Boolean {
if (url == NETWORK_ADDRESS + "report") {
//URLに"/logout"文字が含まれているとき
activity.requestedOrientation =
ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE // 横画面固定
return true
} else {
activity.requestedOrientation =
ActivityInfo.SCREEN_ORIENTATION_PORTRAIT // 縦画面固定
}
return true
}
}
}
webView.loadUrl("javascript:window.location.href='" + NETWORK_ADDRESS + "'")
return v
}
fragment_modal.xml
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
tools:context=".ModalFragment">
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="@string/hello_modal_fragment" />
<Button
android:id="@+id/btn_load_js"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="400dp"
android:layout_marginLeft="200dp"
android:text="LOADJSButton" />
<WebView
android:id="@+id/web_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent">
</WebView>
</FrameLayout>
詰まった点
webView.webViewClient =
の書き方
webView.loadUrl("javascript:window.location.href='" + NETWORK_ADDRESS + "'")
の書き方


コメント