Android-----WebView加載HTML界面布局並進行數據交互


注:在做例子之前要先做好准備工作,在app下新建一個名為:assets的目錄(不懂怎么創建的可參考:https://blog.csdn.net/Biegral/article/details/47170037

assets目錄下存放要加載的HTML文件等

 

 

有關webView的講解自行百度,這里直接用例子來大概了解一下:

Xml布局文件:

 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <WebView
        android:id="@+id/obd_webview"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"/>

    <TextView android:id="@+id/obd_text"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text=""/>

</LinearLayout>

 

HTML內容:

 

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
        <script type="text/javascript">
            function actionFromNative(){
                 document.getElementById("log_msg").innerHTML +=
                     "<br\>Native調用了js函數";
            }

            function actionFromNativeWithParam(arg){
                 document.getElementById("log_msg").innerHTML +=
                     ("<br\>Native調用了js函數並傳遞參數:"+arg);
            }

        </script>
    </head>
    <body>
        <p>WebView與Javascript交互</p>
        <div>
            <button onClick="window.web.actionFromJs()">點擊調用Native代碼</button>
        </div>
        <br/>
        <div>
            <button onClick="window.web.actionFromJsWithParam('come from Js')">點擊調用Native代碼並傳遞參數</button>
        </div>
        <br/>
        <div id="log_msg">調用打印信息</div>
    </body>
</html>

 

Android中的邏輯處理:

 

public class OBDCheckWebView extends AppCompatActivity {

    private WebView OBDmwebView;
    private TextView OBDTextView;

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

        OBDmwebView = this.findViewById(R.id.obd_webview);
        OBDmwebView.getSettings().setJavaScriptEnabled(true);   //啟用Javascript
        OBDmwebView.loadUrl("file:///android_asset/web.html");  //加載文件的路徑以及文件名
        OBDmwebView.addJavascriptInterface(this,"web");

        OBDTextView = this.findViewById(R.id.obd_text);

        String [] data = {"20190606001","fs301","13024","粵-A888","白色","2019-02-02 15:38:28","338km"};

    }

    //此方法沒參數
    @android.webkit.JavascriptInterface
    public void actionFromJs() {
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                Toast.makeText(OBDCheckWebView.this, "js調用了Native函數", Toast.LENGTH_SHORT).show();
                String text = OBDTextView.getText() + "\njs調用了Native函數";
                OBDTextView.setText(text);
            }
        });
    }

    //可傳遞參數
    @android.webkit.JavascriptInterface
    public void actionFromJsWithParam(final String[] str) {
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                Toast.makeText(OBDCheckWebView.this, "js調用了Native函數傳遞參數:" + str, Toast.LENGTH_SHORT).show();
                String text = OBDTextView.getText() +  "\njs調用了Native函數傳遞參數:" + str;
                OBDTextView.setText(text);
            }
        });

    }

}

 

運行效果如圖:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM