Android Web 视图异常
Android WebView Exception
我在 android 中使用 WebView
。当我单击三个按钮之一时,它会在屏幕的其余部分呈现一个相关网站。当我点击第一个按钮时,效果很好(图 1)(http://www.baidu.com)。但是当我点击剩下的两个时,它会弹出一个提示让我选择浏览器(图2)。为什么不能渲染成第一个?
我的activity.xml
:
<LinearLayout 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" android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".WebsiteSwitcher"
android:orientation="vertical">
<TableLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TableRow>
<Button
android:id="@+id/button_one"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Baidu"/>
<Button
android:id="@+id/button_two"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Weibo"/>
<Button
android:id="@+id/button_three"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Renren"/>
</TableRow>
</TableLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<WebView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/webView1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
/>
</LinearLayout>
而我在 onCreate
方法中的代码是这样的:
Button goBaidu = (Button)findViewById(R.id.button_one);
goBaidu.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
webView.getSettings().setJavaScriptEnabled(true);
webView.loadUrl("http://www.baidu.com");
}
});
it pops out a hint to let me choose the browser(picture 2). Why it can
not be rendered as the first one?
通过重写 shouldOverrideUrlLoading
:
从 WebView 设置 WebViewClient
中的网页上单击的链接加载其他页面
webView.setWebChromeClient(new WebChromeClient());
webView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
});
只需设置 WebViewClient 即可:
webView.setWebViewClient(new WebViewClient());
文档说 "If WebViewClient is not provided, by default WebView will ask Activity Manager to choose the proper handler for the url"。一旦你提供它,即使是默认的,WebView 已经开始自己加载 URL。
事实上,调用 view.loadUrl(url)
并从 shouldOverrideUrlLoading
返回 true
并不是最好的做法,因为 shouldOverrideUrlLoading
也会被非 https 的子帧调用方案(例如 tel:
)。
我在 android 中使用 WebView
。当我单击三个按钮之一时,它会在屏幕的其余部分呈现一个相关网站。当我点击第一个按钮时,效果很好(图 1)(http://www.baidu.com)。但是当我点击剩下的两个时,它会弹出一个提示让我选择浏览器(图2)。为什么不能渲染成第一个?
我的activity.xml
:
<LinearLayout 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" android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".WebsiteSwitcher"
android:orientation="vertical">
<TableLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TableRow>
<Button
android:id="@+id/button_one"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Baidu"/>
<Button
android:id="@+id/button_two"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Weibo"/>
<Button
android:id="@+id/button_three"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Renren"/>
</TableRow>
</TableLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<WebView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/webView1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
/>
</LinearLayout>
而我在 onCreate
方法中的代码是这样的:
Button goBaidu = (Button)findViewById(R.id.button_one);
goBaidu.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
webView.getSettings().setJavaScriptEnabled(true);
webView.loadUrl("http://www.baidu.com");
}
});
it pops out a hint to let me choose the browser(picture 2). Why it can not be rendered as the first one?
通过重写 shouldOverrideUrlLoading
:
WebViewClient
中的网页上单击的链接加载其他页面
webView.setWebChromeClient(new WebChromeClient());
webView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
});
只需设置 WebViewClient 即可:
webView.setWebViewClient(new WebViewClient());
文档说 "If WebViewClient is not provided, by default WebView will ask Activity Manager to choose the proper handler for the url"。一旦你提供它,即使是默认的,WebView 已经开始自己加载 URL。
事实上,调用 view.loadUrl(url)
并从 shouldOverrideUrlLoading
返回 true
并不是最好的做法,因为 shouldOverrideUrlLoading
也会被非 https 的子帧调用方案(例如 tel:
)。