Android webview setWebViewClient()什么都不显示

时间:2016-04-08 08:11:50

标签: android webview

家伙!我在使用 android-webview 加载html页面时遇到问题。我需要使用我的webview加载网址,但不能使用移动系统broswer或其他broswer加载网址,因此我必须将 setWebViewClient() 方法应用于我的网页视图,但不是 WebChromeClient() 即可。但是,当应用 setWebViewClient() 时,除了空白页面之外什么都不加载,并且可以在后面的方法中正常工作。我不知道问题出在哪里,这是代码:

.xml

<WebView android:id="@+id/webview"
         android:layout_marginTop="50dp"
         android:layout_width="fill_parent"
         android:layout_height="fill_parent"/>

.java

WebView webView = (WebView)findViewById(R.id.webView);
WebSettings webSettings = webView.getSettings();
webSettings.setJavaScriptEnabled(true);

if (Build.VERSION.SDK_INT >= 19) {
    webSettings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
}

private String loadUrl = "http://www.baidu.com";
webView.loadUrl(loadUrl);

webView.setWebViewClient(new WebViewClient() {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        view.loadUrl(url);
        return true;
    }
    @Override
    public void onLoadResource(WebView view, String url) {
        view.loadUrl(url);
        super.onLoadResource(view, url);
    }
    @Override
    public void onPageStarted(WebView view, String url, Bitmap favicon) {
        view.loadUrl(url);
        super.onPageStarted(view, url, favicon);
    }
});

/*
webView.setWebChromeClient(new WebChromeClient() {
    @Override
    public void onProgressChanged(WebView view, int newProgress) {
        Log.v(Log_Tag, String.valueOf(newProgress));
    }
});
*/

2 个答案:

答案 0 :(得分:0)

只需将此代码放入您的活动

即可
private String loadUrl = "https://www.google.com";

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    WebView mWebView = (WebView) findViewById(R.id.webView);
    WebSettings mWebSettings = mWebView.getSettings();
    mWebSettings.setJavaScriptEnabled(true);
    WebViewClient mWebViewClient = new WebViewClient();
    mWebView.setWebViewClient(mWebViewClient);
    mWebView.loadUrl(loadUrl);
}

如果您不想更改其行为或添加某些功能,则不应覆盖WebViewClient类中的方法。并且不要忘记将Internet权限添加到您的清单文件中。没有它,WebView将无法运行。         

答案 1 :(得分:0)

再次感谢@Mike M. shouldOverrideUrlLoading() 方法 返回false ,如果您要使用webView加载网址但不加载移动系统默认浏览器或其他第三方浏览器。而且,如果您想使用webView处理网页的某些javascript操作,建议您将 WebChromClient 应用于您的webView。

这是一个很好的例子:

WebView webView = (WebView)findViewById(R.id.webView);
WebSettings webSettings = webView.getSettings();
webSettings.setJavaScriptEnabled(true);

//load the page with cache
if (Build.VERSION.SDK_INT >= 19) {
    webSettings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
}


webView.setWebViewClient(new WebViewClient() {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        //return true load with system-default-browser or other browsers, false with your webView
        return false;
    }

    @Override
    public void onLoadResource(WebView view, String url) {
        super.onLoadResource(view, url);
    }

    @Override
    public void onPageStarted(WebView view, String url, Bitmap favicon) {
        super.onPageStarted(view, url, favicon);
    }
});

webView.setWebChromeClient(new WebChromeClient() {
    @Override
    public void onProgressChanged(WebView view, int newProgress) {
        Log.v(Log_Tag, String.valueOf(newProgress));
        //put your code here if your want to show the progress with progressbar
    }
});

private String loadUrl = "http://www.baidu.com";
webView.loadUrl(loadUrl);