android——WebView交互

android——WebView交互

<uses-permission android:name="android.permission.INTERNET"/>
<activity android:name=".BaiduActivity"></activity>

/——java/js交互——/

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    private WebView mW;
    String url = "file:///android_asset/a.html";
    /**
     * 调用js代码
     */
    private Button mBt;
    private Button mBt2;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
    }

    @SuppressLint("JavascriptInterface")
    private void initView() {
        mW = (WebView) findViewById(R.id.w);
        WebSettings settings = mW.getSettings();
        //设置是否支持js交互
        settings.setJavaScriptEnabled(true);
        //第二个参数也是js给的
        mW.addJavascriptInterface(this, "hello");

        //加载一个网页,这个网页加载的是assets目录里的a.html
        mW.loadUrl(url);


        mBt = (Button) findViewById(R.id.bt);
        mBt.setOnClickListener(this);
        mBt2 = (Button) findViewById(R.id.bt2);
        mBt2.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent=new Intent(MainActivity.this,BaiduActivity.class);
                startActivity(intent);
            }
        });
    }

    /**
     * 方法的名字是js给的
     */
    @JavascriptInterface
    public void showAndroid() {
        Log.e("MainActivity", "showAndroid");
        Toast.makeText(MainActivity.this, "js 调用Android 代码了", Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            default:
                break;
            case R.id.bt:
                mW.loadUrl("javascript:show('我是android传过来的代码')");
                break;
        }
    }
}

/——跳转到百度页面——/

public class BaiduActivity extends Activity {
    private WebView mwebview;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_baidu);
        mwebview = (WebView) findViewById(R.id.id_webview);
        mwebview.getSettings().setJavaScriptEnabled(true);      //设置WebView属性,能够执行Javascript脚本
        mwebview.loadUrl("http://www.baidu.com/");                  //加载需要显示的网页
        mwebview.setWebViewClient(new HelloWebViewClient ());       //设置Web视图
    }

    @Override
    //设置回退
    //覆盖Activity类的onKeyDown(int keyCoder,KeyEvent event)方法
    public boolean onKeyDown(int keyCode, KeyEvent event) {

        if ((keyCode == KeyEvent.KEYCODE_BACK) && mwebview.canGoBack()) {
            mwebview.goBack(); //调用goBack()返回WebView的上一页面
            return true;
        }
        return false;
    }

    //Web视图
    private class HelloWebViewClient extends WebViewClient {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            view.loadUrl(url);
            return true;
        }
    }
}

/——XML文件——/
<LinearLayout 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"
    android:orientation="vertical"
    >

    <Button
        android:id="@+id/bt"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="调用js代码" />
    <Button
        android:id="@+id/bt2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="跳转百度页面" />

    <WebView
        android:id="@+id/w"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</LinearLayout>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <WebView
        android:id="@+id/id_webview"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"/>
</LinearLayout>