加载 WebView 可防止在布局中加载其他视图
Posted
技术标签:
【中文标题】加载 WebView 可防止在布局中加载其他视图【英文标题】:Loading WebView prevents other views from being loaded in the layout 【发布时间】:2018-11-03 17:59:18 【问题描述】:我正在尝试有一个布局,其中有一个 WebView 和其他视图,例如 TextView。
从下面的代码中,我希望 WebView 显示在高度的前 300dp 上,而 TextView 显示在屏幕底部并带有文本“测试文本”
现在,当运行将url加载到WebView中的代码时(使用下面的代码sn-p),WebView成功加载了url,但是,其他视图被忽略而不是已加载。
有人可以帮我在同一屏幕上加载 WebView 和其他视图吗?
我尝试在以下之间切换:
WebView webView = findViewById(R.id.temp_web_view);
和
WebView webView = findViewById(this);
还有,
setContentView(webView);
和
setContentView(R.layout.activity_profiling_result);
但到目前为止还没有运气..
SomeActivity.java
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_profiling_result);
WebView webView = findViewById(R.id.temp_web_view);
// must call removeView() on the child's parent first.
if (webView.getParent() != null)
((ViewGroup)webView.getParent()).removeView(webView);
setContentView(webView);
webView.getSettings().setjavascriptEnabled(true);
String WEB_URL = "https://www.google.ca/";
webView.loadUrl(WEB_URL);
activity_profiling_result.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_
android:layout_ >
<WebView
android:id="@+id/temp_web_view"
android:layout_
android:layout_ />
<TextView
android:id="@+id/temp_text_view"
android:layout_
android:layout_
android:layout_alignParentBottom="true"
android:text="Test Text" />
</RelativeLayout>
【问题讨论】:
【参考方案1】:删除这个
setContentView(webView);
// must call removeView() on the child's parent first.
if (webView.getParent() != null)
// this will remove the webView from the customise layout
((ViewGroup)webView.getParent()).removeView(webView);
因为它将用webView
实例替换整个布局。
setContentView(R.layout.activity_profiling_result);
附加并显示自定义布局(您的 webView 或 textview 等)
setContentView(webView);
附加并显示 webView 实例
setContentView
Set the activity content to an explicit view. This view is placed directly into the activity's view hierarchy
。它本身可以是一个 复杂的视图层次结构。调用此方法时,布局 指定视图的参数被忽略。Both the width and the
height of the view are set by default to MATCH_PARENT.
自己用 布局参数,调用 setContentView(android.view.View, android.view.ViewGroup.LayoutParams) 代替。
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_profiling_result);
WebView webView = findViewById(R.id.temp_web_view);
// must call removeView() on the child's parent first.
//if (webView.getParent() != null)
//((ViewGroup)webView.getParent()).removeView(webView);
//
//setContentView(webView);
webView.getSettings().setJavaScriptEnabled(true);
String WEB_URL = "https://www.google.ca/";
webView.loadUrl(WEB_URL);
【讨论】:
setContentView(webView);确实用 webView 实例替换了整个布局。但是,当我把 setContentView(R.layout.activity_profiling_result);它不加载任何东西。那行之后只是一个空白页.. 你为什么要这么做(webView.getParent() != null)
?使用此((ViewGroup)webView.getParent()).removeView(webView);
,您将从当前布局中删除 webView,因此也将其删除
因为没有它我得到以下错误:指定的孩子已经有一个父母。您必须首先在孩子的父母上调用 removeView()。我删除了整个 'setContentView()' 行,它现在可以正常工作了。
Google 告诉我在示例中使用“setContentView()”,我使用了它,但我得到了那个错误。没有它它工作正常。谢谢。 developer.android.com/reference/android/webkit/WebView
您也可以看看***.com/questions/50490283/… 吗?我昨天发布了这个,但到目前为止没有答案,也没有运气:(【参考方案2】:
删除这些代码,它会按预期工作
如果 (webView.getParent() != null) ((ViewGroup)webView.getParent()).removeView(webView); setContentView(webView);
你的最终代码应该是:
@Override protected void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.activity_profiling_result); WebView webView = findViewById(R.id.temp_web_view); webView.getSettings().setJavaScriptEnabled(true); 字符串 WEB_URL = "https://www.google.ca/"; webView.loadUrl(WEB_URL);
【讨论】:
哇,不用 setContentView() 也能完美运行。我使用它是因为根据:developer.android.com/reference/android/webkit/WebView 谢谢!以上是关于加载 WebView 可防止在布局中加载其他视图的主要内容,如果未能解决你的问题,请参考以下文章
在列表中加载 WebView 而无需重新加载 webView 内容 SwiftUI