在我们的实际开发中,我们用到WebView就是为了在自己的APP中的某个部分来显示指定网页的效果。
但是在学习的过程中,我发现一个问题:
有的网页使用WebView控件显示出来以后,再点击网页中的某个链接,进入到下一个网页,它没有在APP中继续显示,而是要在手机浏览器中显示网址,这显示没有了良好的人机交互体验。(PS:这个问题有的网页是不出现的,本人没有大量测试,估计是我在Fragment中使用WebView的原因,在Activity中就没有这个问题,不管怎么样,加上相应的代码就可以了)
下面来看代码
1 package com.example.qunxiong; 2 3 import android.os.Bundle; 4 import android.support.v4.app.Fragment; 5 import android.view.LayoutInflater; 6 import android.view.View; 7 import android.view.ViewGroup; 8 import android.webkit.WebSettings; 9 import android.webkit.WebView; 10 import android.webkit.WebViewClient; 11 12 public class FragmentShow extends Fragment{ 13 private WebView webview; 14 @Override 15 public View onCreateView(LayoutInflater inflater, ViewGroup container, 16 Bundle savedInstanceState) { 17 // TODO Auto-generated method stub 18 19 20 21 return inflater.inflate(R.layout.web_show, container,false); 22 } 23 @Override 24 public void onViewCreated(View view, Bundle savedInstanceState) { 25 // TODO Auto-generated method stub 26 super.onViewCreated(view, savedInstanceState); 27 webview = (WebView) view.findViewById(R.id.webview); 28 WebSettings settings = webview.getSettings(); 29 settings.setJavaScriptEnabled(true); 30 //设置在APP内部打开网址链接 31 webview.setWebViewClient(new webViewClient()); 32 33 //支持缩放 34 settings.setUseWideViewPort(true);//设定支持viewport 35 settings.setLoadWithOverviewMode(true); 36 settings.setBuiltInZoomControls(true); 37 settings.setSupportZoom(true);//设定支持缩放 38 39 //打开的网址 40 webview.loadUrl("http://www.527fgame.com/news.html"); 41 } 42 //设置在APP内部打开网址链接 43 class webViewClient extends WebViewClient{ 44 @Override 45 public boolean shouldOverrideUrlLoading(WebView view, String url) { 46 // TODO Auto-generated method stub 47 view.loadUrl(url); 48 return true; 49 } 50 } 51 }
代码很简单,都给了相应的注释了
其中关键的代码
1 //设置在APP内部打开网址链接 2 webview.setWebViewClient(new webViewClient());
1 //设置在APP内部打开网址链接 2 class webViewClient extends WebViewClient{ 3 @Override 4 public boolean shouldOverrideUrlLoading(WebView view, String url) { 5 // TODO Auto-generated method stub 6 view.loadUrl(url); 7 return true; 8 } 9 }
加上之后,就不会出现在浏览器中显示网页的问题了