1:直接在xml中給webview設定了背景圖片,背景圖片不生效的問題
解決方法:在xml中給webview設定背景圖片,然後在程式碼中增加:webView.setBackgroundColor(0);
2:點選h5中的按鈕時,通過scheme跳轉到Android原生介面 a:具體的操作流程可以參考我朋友的文章:blog.csdn.net/m0_37700275…
b:問題一:7.0/8.0手機h5端的scheme和我這邊的scheme完全一樣,但是點選按鈕不能跳轉成功 原因:我在程式碼中呼叫了以下程式碼:
mWbAllFenqu.setWebViewClient(new WebViewClient()
{
@Override
public void onPageFinished(WebView view, String url)
{
super.onPageFinished(view, url);
LogUtils.i("onPageFinished");
dialogDismiss();
}
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon)
{
super.onPageStarted(view, url, favicon);
LogUtils.i("onPageStarted");
dialogShow();
}
});
複製程式碼
解釋:我們是完全通過h5端控制跳轉的,也就是說在Android端是不寫跳轉事件的,所以我在setWebViewClient()
的時候,並沒有重寫shouldOverrideUrlLoading()方法,也沒有在shouldOverrideUrlLoading()方法中根據點選
h5按鈕時的url進行頁面跳轉,而我之所以呼叫setWebViewClient()方法時想在h5頁面開始載入時彈出載入框,在h5頁面載入完成後載入框消失。
如果想要在setWebViewClient()中控制頁面跳轉,可以這樣寫:
複製程式碼
mWbAllFenqu.setWebViewClient(new WebViewClient()
{
@Override
public void onPageFinished(WebView view, String url)
{
super.onPageFinished(view, url);
LogUtils.i("onPageFinished");
dialogDismiss();
}
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon)
{
super.onPageStarted(view, url, favicon);
LogUtils.i("onPageStarted");
dialogShow();
}
@Override
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
LogUtils.i("shouldOverrideUrlLoading");
LogUtils.i("request.toString():"+request.getUrl().toString());
Intent intent = new Intent(Intent.ACTION_VIEW, request.getUrl());
startActivity(intent);
return true;
}
});
複製程式碼
如果和我一樣,在Android端只定義scheme,由h5端完全呼叫,而又想在頁面載入過程中有載入框出現,頁面載入完成後
載入框消失,可以不呼叫setWebViewClient()方法,改成:
複製程式碼
dialogShow();
webView.loadUrl(url);
mWbAllFenqu.setWebChromeClient(new WebChromeClient()
{
public void onProgressChanged(WebView view, int progress)
{
//當進度走到100的時候做自己的操作
if(progress == 100){
dialogDismiss();
}
}
});
複製程式碼
c:問題二:程式碼不走shouldOverrideUrlLoading()
方法
在重寫shouldOverrideUrlLoading()
方法時,我遇到了問題二,就是我點選h5中的按鈕時並不走shouldOverrideUrlLoading()
方法,
這讓我無比鬱悶,後來嘗試著把webView.loadUrl(url)
放到setWebViewClient()
方法的後面,竟然神奇的成功了,但是有些其他型號的手機
這樣做還是不走shouldOverrideUrlLoading()
方法
d:問題三:適配5.0/6.0手機 當我在公司的7.0/8.0手機上完成頁面顯示和頁面跳轉的功能後,我給自己的6.0手機裝了一個APK,發現6.0中h5頁面中的所有按鈕 都擠到了左上角,於是又給5.0手機裝了一個,也是一樣的問題,後來經過不斷除錯,發現原因是:ES6的版本過高,將ES6改成ES5就沒問題了。
e:問題四:5.0手機的頁面跳轉問題
當5.0/6.0手機的頁面沒問題之後,6.0可以通過scheme由h5端跳轉到Android原生頁面,
但是5.0直接報錯:TOPICID://aa.diqu:8888/test處的網頁不能載入為:net::ERR_UNKOWN_URL_SCHEMW,
於是改成使用setWebViewClient()
,重寫shouldOverrideUrlLoading()
方法跳轉,發現5.0的手機不走shouldOverrideUrlLoading()
方法,
於是改成以下方法:
mWbAllFenqu.setWebChromeClient(new WebChromeClient() {
@Override
public void onReceivedTitle(WebView view, String title) {
LogUtils.i("onReceivedTitle");
LogUtils.i("view.getUrl():"+view.getUrl());
String url = view.getUrl();
if (url.startsWith("topicid")) //只有是跳轉到地區介面的時候,才進行跳轉處理
{
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
startActivity(intent);
}
}
public void onProgressChanged(WebView view, int progress)
{
//當進度走到100的時候做自己的操作
if(progress == 100){
dialogDismiss();
}
}
});
複製程式碼
總結:如果使用scheme從h5端跳轉到Android原生介面,建議使用setWebChromeClient()
方法,百分百沒問題