我想在对话框中显示我的网页内容。它可以是普通的Dialog() 或DialogFragment。我已经创建了布局:
1 2 3 4 5 6 7 8 9 10
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <WebView android:id="@+id/webView" android:layout_width="match_parent" android:layout_height="match_parent"/> </RelativeLayout>
然后首先创建 Fragment 扩展 DialogFragment():
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
class ShowJob : DialogFragment(), View.OnClickListener { var listPosition: Int? = 0 var offset: Int? = 0 lateinit var link: String val TAG = ShowJob::class.java.simpleName!! override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) val bundle = arguments offset = bundle!!.getInt("jobOffset") link = bundle.getString("link") listPosition = bundle.getInt("listPosition", 0) } override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { val view = inflater.inflate(R.layout.show_job_scr,container,false) val webView = view.findViewById<WebView>(R.id.webView) webView.loadUrl(link) webView.webViewClient = HelloWebViewClient() WebView.setWebContentsDebuggingEnabled(false) return view } private inner class HelloWebViewClient : WebViewClient() { override fun shouldOverrideUrlLoading(view: WebView, url: String): Boolean { val intent = Intent(Intent.ACTION_VIEW, Uri.parse(url)) startActivity(intent) return true } } override fun onClick(p0: View?) { } }
它不显示任何内容并将我重定向到 Chrome 等内置浏览器。然后我读到有时更改根布局类型的类型会有所帮助,并将我的 RelativeLayout 更改为 FrameLayout - 它没有帮助。然后我认为问题可能与所有布局有关,并在 textView 中放置了一些文本,它显示在我的片段中。第二个变体 - 我从我试图显示 DialogFragment:
的父片段中显示了 Dialog()
1 2 3 4 5 6 7 8 9 10 11 12
val webDialog = Dialog(context) webDialog.setContentView(R.layout.show_job_scr) webDialog.setCancelable(true) val webView = webDialog.findViewById<WebView>(R.id.webView) !webView.isScrollbarFadingEnabled !webView.isHorizontalScrollBarEnabled webView.settings.javaScriptEnabled webView.clearCache(true) webView.loadUrl(url) webDialog.show()
它还将我重定向到内置浏览器。我的问题在哪里,我该如何解决?我看到了这个例子,这里开发人员设法在对话框中显示内容。我看到了很多示例,并且到处有人设法在对话框中显示 Web 内容,但我在重定向方面遇到了一些问题。
相关讨论
你能在 shouldOverideUrlLoading 视图中添加这一行吗?.loadUrl(request?.url.toString()) @AnasMehar,我必须在哪里添加这一行?我发布了我的解决方案,如果需要,您也可以查看它:) WebViewClient 回调方法 shouldOverrideUrlLoading 必须 args 第一个视图:WebView,第二个是请求:WebResourceRequest?所以你可以在回调方法中添加这条线 view?.loadUrl(request?.url.toString()) override fun shouldOverrideUrlLoading(view: WebView?, request: WebResourceRequest?): Boolean 因为您实现了它以将所有内容重定向到默认浏览器。您的代码正是这样做的 - 重定向到默认浏览器。 但现在我设法在我的 dialogFragment 中显示 webView,也许问题出在内部类上?
1 2 3 4 5 6 7 8 9 10 11 12
// this is the reason webView.webViewClient = HelloWebViewClient() private inner class HelloWebViewClient : WebViewClient() { override fun shouldOverrideUrlLoading(view: WebView, url: String): Boolean { val intent = Intent(Intent.ACTION_VIEW, Uri.parse(url)) startActivity(intent) return true } }
相关讨论
所以我必须删除这个类,我会在 dialogFragment 中显示我的 webView?
我已经通过在这个问题上发布的解决方案解决了我的问题:
1 2 3 4 5 6
webView.webViewClient = object : WebViewClient() { override fun shouldOverrideUrlLoading(view: WebView, url: String): Boolean { view.loadUrl(url) return false } }
我删除了内部类并在 onCreateView.
中添加了这些行