【发布时间】:2018-05-08 00:23:48
【问题描述】:
我有一个 webview 并加载它的网页。工作正常。
但问题是,“当我点击网页中的任何链接时,重定向到浏览器而不是在创建的网页中”。
我想在同一个网页中打开它。
【问题讨论】:
我有一个 webview 并加载它的网页。工作正常。
但问题是,“当我点击网页中的任何链接时,重定向到浏览器而不是在创建的网页中”。
我想在同一个网页中打开它。
【问题讨论】:
如果您想更好地控制点击链接的加载位置,请创建您自己的 WebViewClient 来覆盖 shouldOverrideUrlLoading() 方法。
在 webview 中的 loadUrl() 之前添加以下代码。
webview.setWebViewClient(new WebViewClient() {
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
});
更多详情请参考Web Apps in WebView
【讨论】:
创建一个扩展 WebViewClient 的类:
private class MyBrowser extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String urlNewString) {
view.loadUrl(urlNewString);
return true;
}
@Override
public void onPageFinished(WebView view, String url) {
}
}
然后将 webViewClient 设置为您的 webview 最初:
webView.setWebViewClient(new MyBrowser());
【讨论】:
在特定活动标签内的AndroidMenifest.xml 中使用以下代码
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.BROWSABLE"/>
</intent-filter>
【讨论】:
这里我为你准备了一个示例 Activity 类。
每当您尝试在 WebView 中打开链接时,浏览器都会打开该链接,因为您没有在代码中使用任何 WebViewClient。请参考下面我分享给大家的代码!
public class WebViewClientDemoActivity extends Activity {
/** Called when the activity is first created. */
WebView web;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
web = (WebView) findViewById(R.id.webview01);
// Setting the WebView Client for the WebView over here
web.setWebViewClient(new myWebClient());
web.getSettings().setJavaScriptEnabled(true);
web.loadUrl("http://www.google.com");
}
// The WebViewClient class
public class myWebClient extends WebViewClient
{
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
// TODO Auto-generated method stub
super.onPageStarted(view, url, favicon);
}
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
// TODO Auto-generated method stub
view.loadUrl(url);
return true;
}
}
// To handle "Back" key press event for WebView to go back to previous screen.
@Override
public boolean onKeyDown(int keyCode, KeyEvent event)
{
if ((keyCode == KeyEvent.KEYCODE_BACK) && web.canGoBack()) {
web.goBack();
return true;
}
return super.onKeyDown(keyCode, event);
}
}
请让我知道它是否有效! :)
【讨论】:
只需在代码中添加以下行
private class MyWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url)
{
view.loadUrl(url);
return true;
}
public void onPageFinished(WebView view, String url) {
// TODO Auto-generated method stub
super.onPageFinished(view, url);
}
}
并为您的 webview 设置上面的 webview 客户端,如下所示:
webView.setWebViewClient(new MyWebViewClient());
【讨论】:
试试这个:
public class MainActivity extends Activity {
Button b1;
EditText ed1;
private WebView wv1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
b1=(Button)findViewById(R.id.button);
ed1=(EditText)findViewById(R.id.editText);
wv1=(WebView)findViewById(R.id.webView);
wv1.setWebViewClient(new MyBrowser());
b1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String url = ed1.getText().toString();
wv1.getSettings().setLoadsImagesAutomatically(true);
wv1.getSettings().setJavaScriptEnabled(true);
wv1.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);
wv1.loadUrl(url);
}
});
}
private class MyBrowser extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
如需进一步参考,您可以访问以下链接
http://www.tutorialspoint.com/android/android_webview_layout.htm
【讨论】: