Android 關(guān)于WebView全方面的使用(項目應(yīng)用篇)

1谍倦、關(guān)于WebView的使用:

  • 與JS交互
  • 撥打電話、發(fā)送短信泪勒、發(fā)送郵件
  • 上傳圖片(版本兼容)
  • 進度條設(shè)置
  • 字體大小設(shè)置
  • 返回網(wǎng)頁上一層昼蛀、顯示網(wǎng)頁標題
  • 全屏播放網(wǎng)絡(luò)視頻
首頁

2、文章說明

WebView的使用已經(jīng)是老生常談了圆存,看到很多文章說了用法叼旋,但我很少看到全的或者是項目中可以直接使用的,都是看了很多后沦辙,自己把功能都集合在一起夫植。這里是一份比較全面的WebView項目應(yīng)用篇,其中已經(jīng)解決了應(yīng)用時出現(xiàn)的很多bug油讯,希望能對大家有幫助详民。

3、項目地址

WebViewStudy

4陌兑、內(nèi)容詳細介紹

4.1 電話短信郵件

電話短信郵件&與JS交互測試.png

給WebView設(shè)置WebViewClient:

webView.setWebViewClient(new MyWebViewClient(this));

其中MyWebViewClient內(nèi)容:

/** 
* 監(jiān)聽網(wǎng)頁鏈接:
* - 優(yōu)酷視頻直接跳到自帶瀏覽器 
* - 根據(jù)標識:打電話沈跨、發(fā)短信、發(fā)郵件 
* - 進度條的顯示 
* - 加載完成后兔综,添加javascript監(jiān)聽 
*/
public class MyWebViewClient extends WebViewClient {

    private IWebPageView iWebPageView;
    private WebViewActivity activity;

    public MyWebViewClient(IWebPageView iWebPageView) {
        this.iWebPageView = iWebPageView;
        activity = (WebViewActivity) iWebPageView;

    }

    @SuppressWarnings("deprecation")
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        // 優(yōu)酷視頻跳轉(zhuǎn)瀏覽器播放
        if (url.startsWith("http://v.youku.com/")) {
            Intent intent = new Intent();
            intent.setAction("android.intent.action.VIEW");
            intent.addCategory("android.intent.category.DEFAULT");
            intent.addCategory("android.intent.category.BROWSABLE");
            Uri content_url = Uri.parse(url);
            intent.setData(content_url);
            activity.startActivity(intent);
            return true;

            // 電話谒出、短信、郵箱
        } else if (url.startsWith(WebView.SCHEME_TEL) || url.startsWith("sms:") || url.startsWith(WebView.SCHEME_MAILTO)) {
            try {
                Intent intent = new Intent(Intent.ACTION_VIEW);
                intent.setData(Uri.parse(url));
                activity.startActivity(intent);
            } catch (ActivityNotFoundException ignored) {
            }
            return true;
        }
        iWebPageView.startProgress();
        view.loadUrl(url);
        return false;
    }


    @Override
    public void onPageFinished(WebView view, String url) {
        if (activity.progress90) {
            iWebPageView.hindProgressBar();
        } else {
            activity.pageFinish = true;
        }
        if (!CheckNetwork.isNetworkConnected(activity)) {
            iWebPageView.hindProgressBar();
        }
        // html加載完成之后邻奠,添加監(jiān)聽圖片的點擊js函數(shù)
        iWebPageView.addImageClickListener();
        super.onPageFinished(view, url);
    }

    // 視頻全屏播放按返回頁面被放大的問題
    @Override
    public void onScaleChanged(WebView view, float oldScale, float newScale) {
        super.onScaleChanged(view, oldScale, newScale);
        if(newScale - oldScale > 7) {
            view.setInitialScale((int)(oldScale / newScale * 100)); //異常放大笤喳,縮回去。
        }
    }
}

因為有很多配置碌宴,這里把各個功能模塊通過接口IWebPageView分離了出來杀狡,這樣邏輯更清晰。

4.2 與JS交互

相信大家已經(jīng)看到了上面"----點擊了圖片"的Toast贰镣,這里需要先給WebView設(shè)置JavascriptInterface:
webView.addJavascriptInterface(new ImageClickInterface(this), "injectedObject");

其中ImageClickInterface相關(guān)代碼:

public class ImageClickInterface {
    private Context context;

    public ImageClickInterface(Context context) {
        this.context = context;
    }

    @JavascriptInterface
    public void imageClick(String imgUrl, String hasLink) {
        Toast.makeText(context, "----點擊了圖片", Toast.LENGTH_SHORT).show();
        // 查看大圖
//        Intent intent = new Intent(context, ViewBigImageActivity.class);
//        intent.putStringArrayListExtra("imgUrl",imgUrl);
//        context.startActivity(intent);
//        Log.e("----點擊了圖片 url: ", "" + imgUrl);
    }
}

加入監(jiān)聽:

public void addImageClickListener() {
        // 這段js函數(shù)的功能就是呜象,遍歷所有的img節(jié)點膳凝,
       // 并添加onclick函數(shù),函數(shù)的功能是在圖片點擊的時候調(diào)用本地java接口并傳遞對應(yīng)src和has_link里的值過去
        webView.loadUrl("javascript:(function(){" +
                "var objs = document.getElementsByTagName(\"img\");" +
                "for(var i=0;i<objs.length;i++)" +
                "{" +
                "objs[i].onclick=function(){window.injectedObject.imageClick(this.getAttribute(\"src\"),this.getAttribute(\"has_link\"));}" +
                "}" +
                "})()");
    }

我們來看一下網(wǎng)頁對應(yīng)的源碼:

<img src="[./callsms_files/753b877c-c098-43e9-85cc-6df5bbdaaafe](./callsms_files/753b877c-c098-43e9-85cc-6df5bbdaaafe)" style="width: 100%">

大家可能覺得有點怪異..因為這是保存的本地網(wǎng)頁恭陡,如是線上的話蹬音,是這樣:

<img src='[http://7xk154.com1.z0.glb.clouddn.com/article/753b877c-c098-43e9-85cc-6df5bbdaaafe](http://7xk154.com1.z0.glb.clouddn.com/article/753b877c-c098-43e9-85cc-6df5bbdaaafe)' style='width: 100%'>

這里傳遞過去的是一個圖片url的值,沒有的屬性傳過去的則是null休玩。這樣我們就可以對其進行具體的操作了著淆。

4.3 字體大小設(shè)置

/** 設(shè)置字體默認縮放大小(改變網(wǎng)頁字體大小,setTextSize  api14被棄用)*/
ws.setTextZoom(100);

其中100為默認縮放比,通過設(shè)置縮放比來控制字體大小拴疤。

4.4 上傳圖片(版本兼容) & 全屏播放網(wǎng)絡(luò)視頻 & 顯示網(wǎng)頁標題

這里因為篇幅原因永部,里面的代碼很多,就不貼出來了呐矾,大家可以點擊MyWebChromeClient.java苔埋,查看具體代碼。

上傳圖片.png

4.5 返回網(wǎng)頁上一層

返回網(wǎng)頁上一層及退出全屏等操作:

@Overridepublic 
boolean onKeyDown(int keyCode, KeyEvent event) {    
  if (keyCode == KeyEvent.KEYCODE_BACK) {        
      //全屏播放退出全屏        
      if (webChromeClient.inCustomView()) {            
              hideCustomView();            
              return true;            
        //返回網(wǎng)頁上一頁        
        } else if (webView.canGoBack()) {            
              webView.goBack();            
              return true;            
         //退出網(wǎng)頁        
         } else {            
              webView.loadUrl("about:blank");            
              finish();        
        }    
     }    
    return false;
}

4.6 進度條設(shè)置

這里用的是先加載到90%再加載到100%, 具體為什么相信大家都懂吧...

// 進度條 假裝加載到90%
public void startProgress90() {
        for (int i = 0; i < 900; i++) {
            final int progress = i + 1;
            mProgressBar.postDelayed(new Runnable() {
                @Override
                public void run() {
                    mProgressBar.setProgress(progress);
                    if (progress == 900) {
                        progress90 = true;
                        if (pageFinish) {
                            startProgress90to100();
                        }
                    }
                }
            }, (i + 1) * 2);
        }
    }

再加載到100%:

// 加載到90%后再加載到100%
public void progressChanged(int newProgress) {
        if (progress90) {
            int progress = newProgress * 100;
            if (progress > 900) {
                mProgressBar.setProgress(progress);
                if (progress == 1000) {
                    mProgressBar.setVisibility(View.GONE);
                }
            }
        }
    }

5蜒犯、推薦閱讀

如很多細節(jié)不知緣由的查看這里

6组橄、所遇問題

End

最后再附一遍項目地址??:WebViewStudy

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末晨炕,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子毫炉,更是在濱河造成了極大的恐慌瓮栗,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,639評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件瞄勾,死亡現(xiàn)場離奇詭異费奸,居然都是意外死亡,警方通過查閱死者的電腦和手機进陡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,277評論 3 385
  • 文/潘曉璐 我一進店門愿阐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事∠峋” “怎么了滥玷?”我有些...
    開封第一講書人閱讀 157,221評論 0 348
  • 文/不壞的土叔 我叫張陵妇蛀,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么魄缚? 我笑而不...
    開封第一講書人閱讀 56,474評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上冶匹,老公的妹妹穿的比我還像新娘习劫。我一直安慰自己,他們只是感情好嚼隘,可當我...
    茶點故事閱讀 65,570評論 6 386
  • 文/花漫 我一把揭開白布诽里。 她就那樣靜靜地躺著,像睡著了一般飞蛹。 火紅的嫁衣襯著肌膚如雪谤狡。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,816評論 1 290
  • 那天桩皿,我揣著相機與錄音豌汇,去河邊找鬼幢炸。 笑死泄隔,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的宛徊。 我是一名探鬼主播佛嬉,決...
    沈念sama閱讀 38,957評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼闸天!你這毒婦竟也來了暖呕?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,718評論 0 266
  • 序言:老撾萬榮一對情侶失蹤苞氮,失蹤者是張志新(化名)和其女友劉穎湾揽,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體笼吟,經(jīng)...
    沈念sama閱讀 44,176評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡库物,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,511評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了贷帮。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片戚揭。...
    茶點故事閱讀 38,646評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖撵枢,靈堂內(nèi)的尸體忽然破棺而出民晒,到底是詐尸還是另有隱情,我是刑警寧澤锄禽,帶...
    沈念sama閱讀 34,322評論 4 330
  • 正文 年R本政府宣布潜必,位于F島的核電站,受9級特大地震影響沃但,放射性物質(zhì)發(fā)生泄漏刮便。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,934評論 3 313
  • 文/蒙蒙 一绽慈、第九天 我趴在偏房一處隱蔽的房頂上張望恨旱。 院中可真熱鬧辈毯,春花似錦、人聲如沸搜贤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,755評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽仪芒。三九已至唁影,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間掂名,已是汗流浹背据沈。 一陣腳步聲響...
    開封第一講書人閱讀 31,987評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留饺蔑,地道東北人锌介。 一個月前我還...
    沈念sama閱讀 46,358評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像猾警,于是被迫代替她去往敵國和親孔祸。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,514評論 2 348

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,771評論 25 707
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫发皿、插件崔慧、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,064評論 4 62
  • 我怎么也沒想到,會在這里撞見他穴墅。 我問店員惶室,還有沒有全麥面包,這時候快到下班的點了玄货,他們正在收拾東西皇钞。我拿起包裝好...
    歐陽十三大人閱讀 561評論 0 4
  • 參考消息網(wǎng)4月6日報道美媒稱,在石油輸出國組織(歐佩克)減少原油產(chǎn)量之際誉结,中國今年2月超越加拿大成為美國原油最大買...
    嘉禾說閱讀 121評論 0 0
  • 許智蘊喜歡梁璟楓惩坑,很久了掉盅。從那天梁璟楓從許智蘊課桌旁走過,到最近因為同學聚會兩人坐在一起以舒,許智蘊一直喜歡梁璟楓趾痘,從...
    波珠云閱讀 262評論 0 1