WebView調用Java方法

1. 使用

  • 1.允許WebView加載js
mWebView.getSettings().setJavaScriptEnabled(true);
  • 2.編寫js接口
  • 3.給WebView添加js接口
mWebView.addJavascriptInterface(new JSInterface(this),"launcher");

4.加載html網頁

格式為file:///android_asset/網頁名.html

mWebView.loadUrl("file:///android_asset/index.html");

2.效果圖

當點擊點擊按鈕時氧猬,會將WebView中輸入的值傳遞給TextView并顯示糊治,效果圖如下所示:


Screenshot.png

3. 代碼

3.1 Html代碼

在main下新建assets文件夾鲤竹,將html文件放入此文件夾中


assets.png

index.html

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title>WebView</title>
    <style>
        body{
            background:#0094ff
        }
        .btn{
            line-height: 40px;
            margin: 10px;
           background:#00ff90
        }
    </style>
</head>
<body>
    <h2>WebView</h2>
    <div><span>請輸入要傳遞的值:</span><input type="text" id="input"/></div>
    <div id="btn"><span class="btn">點擊</span></div>
    <script type="text/javascript">
        var btn = document.getElementById("btn");
        var input = document.getElementById("input");
        btn.addEventListener("click", function () {
            var str = input.value;
            if (window.launcher) {
                launcher.setValue(str)
            } else {
                alert("launcher not found!");
            }
        });
    </script>
</body>
</html>

3.2 xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".web.WebViewActivity">

    <WebView
        android:id="@+id/web_view"
        android:layout_width="match_parent"
        android:layout_height="400dp" />

    <TextView
        android:id="@+id/text_view"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/web_view"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="40dp"
        android:textSize="20sp" />

</RelativeLayout>

3.3 Java代碼

JSBridge接口

public interface JSBridge {
    void setTextView(String str);
}

js接口JSInterface類

public class JSInterface {

    private JSBridge jsBridge;

    public JSInterface(JSBridge jsBridge){
        this.jsBridge = jsBridge;
    }

    //此方法不在主線程中執(zhí)行
    @JavascriptInterface //必須添加此注解渊额,否則無法識別
    public void setValue(String value){
        jsBridge.setTextView(value);
    }
}

Activity代碼

public class WebViewActivity extends AppCompatActivity implements JSBridge {

    private WebView mWebView;
    private TextView mTextView;
    private Handler mHandler;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_web_view);
        initWidgets(savedInstanceState);
    }

    @SuppressLint("SetJavaScriptEnabled")
    private void initWidgets(Bundle savedInstanceState) {
        mWebView = findViewById(R.id.web_view);
        mTextView = findViewById(R.id.text_view);
        mHandler = new Handler();

        //允許WebView加載JS
        mWebView.getSettings().setJavaScriptEnabled(true);
        //給WebView添加JS接口
        mWebView.addJavascriptInterface(new JSInterface(this),"launcher");

        mWebView.loadUrl("file:///android_asset/index.html");
    }


    @Override
    public void setTextView(String str) {
        mHandler.post(() -> mTextView.setText(str));
    }
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖莺掠,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異读宙,居然都是意外死亡彻秆,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進店門结闸,熙熙樓的掌柜王于貴愁眉苦臉地迎上來唇兑,“玉大人,你說我怎么就攤上這事桦锄≡剑” “怎么了?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵结耀,是天一觀的道長留夜。 經常有香客問我匙铡,道長,這世上最難降的妖魔是什么碍粥? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任鳖眼,我火速辦了婚禮,結果婚禮上嚼摩,老公的妹妹穿的比我還像新娘钦讳。我一直安慰自己,他們只是感情好枕面,可當我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布愿卒。 她就那樣靜靜地躺著,像睡著了一般潮秘。 火紅的嫁衣襯著肌膚如雪琼开。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天唇跨,我揣著相機與錄音,去河邊找鬼衬衬。 笑死买猖,一個胖子當著我的面吹牛,可吹牛的內容都是我干的滋尉。 我是一名探鬼主播玉控,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼狮惜!你這毒婦竟也來了高诺?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤碾篡,失蹤者是張志新(化名)和其女友劉穎虱而,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體开泽,經...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡牡拇,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了穆律。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片惠呼。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖峦耘,靈堂內的尸體忽然破棺而出剔蹋,到底是詐尸還是另有隱情,我是刑警寧澤辅髓,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布泣崩,位于F島的核電站少梁,受9級特大地震影響,放射性物質發(fā)生泄漏律想。R本人自食惡果不足惜猎莲,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望技即。 院中可真熱鬧著洼,春花似錦、人聲如沸而叼。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽葵陵。三九已至液荸,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間脱篙,已是汗流浹背娇钱。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留绊困,地道東北人文搂。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像秤朗,于是被迫代替她去往敵國和親煤蹭。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,916評論 2 344

推薦閱讀更多精彩內容

  • Tips 由于WebView的用法實在太多取视,如果您只是想查詢某個功能的使用——建議Ctrl+F(Commad+F)...
    BugDev閱讀 7,737評論 11 109
  • 鏈接:http://www.reibang.com/p/fd61e8f4049e 一硝皂、簡介 這部分主要介紹下 W...
    柒黍閱讀 1,783評論 0 4
  • WebView·開車指南 2016-08-31BugDev 北京市東城區(qū)首席Bug布道師開山之作,一整月交通事故血...
    53c021c38a1d閱讀 826評論 0 1
  • 轉自 http://www.reibang.com/p/3ad7c39858ec 不知不覺作谭,Hybird App已...
    龐哈哈哈12138閱讀 3,872評論 0 9
  • WebView在混合開發(fā)中很重要稽物,如果做純應用開發(fā)的話則很少接觸他,這里來梳理一下WebView的知識折欠。 一 基本...
    wenju_song閱讀 1,441評論 0 5