Webview的使用

1.想要加载本地HTML文件   必须在项目的src下main里面创建一个文件夹assets与java同级     

在assets里面放置你要加载的HTML文件      如果没有可以创建一个myjs.html    里面的代码在下面的记不住的html里面

2.主函数

public class MainActivity extends AppCompatActivity {
    private TextView tv;
    private WebView web;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    tv= (TextView) findViewById(R.id.tv);
    web= (WebView) findViewById(R.id.web);
    web.loadUrl("https://hao.360.cn/");
        web.setWebViewClient(new WebViewClient(){
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                view.loadUrl(url);
                return true;
            }
            //网页打开时  打开动画
            @Override
            public void onPageStarted(WebView view, String url, Bitmap favicon) {
                super.onPageStarted(view, url, favicon);
                Toast.makeText(MainActivity.this, "正在打开中", Toast.LENGTH_SHORT).show();
            }
            //网页加载完成时   关闭动画
            @Override
            public void onPageFinished(WebView view, String url) {
                super.onPageFinished(view, url);
                Toast.makeText(MainActivity.this, "打开完毕", Toast.LENGTH_SHORT).show();
            }
            //加载页面资源时会调用的方法   每一个资源都会调用一次
            @Override
            public void onLoadResource(WebView view, String url) {
                super.onLoadResource(view, url);

            }
            //找不到网页时出现404  调用的方法
            @Override
            public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {
                super.onReceivedError(view, request, error);
                Toast.makeText(MainActivity.this, "网页找不到错误信息", Toast.LENGTH_SHORT).show();
            }
            //这是加载https网址时要重写的方法    不然https的访问webview会是空白
            @Override
            public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
                super.onReceivedSslError(view, handler, error);
                handler.proceed();
                handler.handleMessage(null);
            }
        });


        web.setWebChromeClient(new WebChromeClient(){
            //这是获取页面加载进度
            @Override
            public void onProgressChanged(WebView view, int newProgress) {
                super.onProgressChanged(view, newProgress);
                tv.setText(newProgress+"%");
            }
            //这是获取页面标题
            @Override
            public void onReceivedTitle(WebView view, String title) {
                super.onReceivedTitle(view, title);
                Toast.makeText(MainActivity.this,title, Toast.LENGTH_SHORT).show();
            }
            //这是获取页面小图标
            @Override
            public void onReceivedIcon(WebView view, Bitmap icon) {
                super.onReceivedIcon(view, icon);
            }
        });

//        //声明WebSettings子类
        WebSettings ws = web.getSettings();

//        ws.setSupportZoom(true);//支持缩放  默认true
//        ws.setBuiltInZoomControls(true);//设置内置webview的缩放控件
//        ws.setDisplayZoomControls(false);//隐藏原生的缩放控件
//        //如果访问的页面中要与Javascript交互,则webview必须设置支持Javascript   这个必须写
        ws.setJavaScriptEnabled(true);

        //设置自适应屏幕,两者合用
        ws.setUseWideViewPort(true); //将图片调整到适合webview的大小
        ws.setLoadWithOverviewMode(true); // 缩放至屏幕的大小

        //其他细节操作
//        ws.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); //关闭webview中缓存
//        ws.setAllowFileAccess(true); //设置可以访问文件
//        ws.setJavaScriptCanOpenWindowsAutomatically(true); //支持通过JS打开新窗口
//        ws.setLoadsImagesAutomatically(true); //支持自动加载图片
//        ws.setDefaultTextEncodingName("utf-8");//设置编码格式

    }

    public void cc(View view) {
        switch (view.getId()) {
            case R.id.but1:
                if (web.canGoBack()) {
                    web.goBack();
                }
                break;
            case R.id.but2:
                if (web.canGoForward()){
                    web.goForward();
                }
                break;
        }
    }
    //手机右下角的返回键的点击事件

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (web.canGoBack()) {
            web.goBack();
            return true;
        }
        return super.onKeyDown(keyCode, event);
    }


}

3.主布局

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main"
    android:layout_width="match_parent" android:layout_height="match_parent"
    tools:context="comqq.example.hasee.myapplication.MainActivity"
    android:orientation="vertical">



    <TextView
        android:id="@+id/tv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!" />
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">
        <Button
            android:id="@+id/but1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="上"
            android:onClick="cc"/>
        <Button
            android:id="@+id/but2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="下"
            android:onClick="cc"/>
    </LinearLayout>

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

4.js交互和HTML点击事件    记不住的html

<html>
 <head>
  <title> Android和JS的交互 </title>
  <meta charset="utf-8">
  <meta name="Generator" content="EditPlus">
  <meta name="Author" content="">
  <meta name="Keywords" content="">
  <meta name="Description" content="">
  <script type="text/javascript">
      function callJS(){
         alert("弹出对话框");
      }

      function testconfirm(){
         var r= confirm("您确定要离开么?");
         alert(r);
      }
      function testprompt(){
         var name = prompt("请输入用户名","admin");
         alert(name);
      }

     
  </script>
 </head>

 <body>
   <input type="button" value="按钮一" onClick="callJS()"/>
   <input type="button" value="按钮二" onClick="testconfirm()"/>
   <input type="button" value="按钮三" onClick="testprompt()"/>
<input type="button" value="点击调用android代码并传递参数"
       onclick="window.Android.startFunction('js传递给android的参数')"/>
   <br>
   <font color="red" size="5">生者为过客,死者为归人。</font>
   <br>
   <font color="green" size="5">天地一逆旅,同悲万古尘。</font>
 </body>
</html>

5.创建一个类  diao

public class JSInterface{

    private Context context;

    public JSInterface(Context context) {
        this.context = context;
    }
//    在js当中调用以下方法,需要加注解@JavascriptInterface
    @JavascriptInterface
    public String startFunction(String str){
        Toast.makeText(context,str+"不要看洛克王国,嗯哼!!",Toast.LENGTH_LONG).show();
        return "abcdefg";
    }
}


 

6.主函数

public class MainActivity extends AppCompatActivity {
    private WebView web;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        web= (WebView) findViewById(R.id.web);
        WebSettings set = web.getSettings();
        //        设置与Js交互的权限
        set.setJavaScriptEnabled(true);
        //         设置允许JS弹窗
        set.setJavaScriptCanOpenWindowsAutomatically(true);
        web.loadUrl("file:///android_asset/myjs.html");
        web.setWebChromeClient(new WebChromeClient());

        //        让此界面当中的webview的js调用android的代码
        web.addJavascriptInterface(new JSInterface(this),"Android");



    }

    public void cc(View view) {
        switch (view.getId()) {
            case R.id.but1:
                web.loadUrl("javascript:callJS()");

                break;
            case R.id.but2:
//                web.evaluateJavascript("javascript:testconfirm()", new ValueCallback<String>() {
//                    @Override
//                    public void onReceiveValue(String s) {
//                        Toast.makeText(MainActivity.this, s+"qqq", Toast.LENGTH_SHORT).show();
//                    }
//                });
                break;
        }
    }
}


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值