zoukankan      html  css  js  c++  java
  • Android小技巧总结——持续更新

    WebView实现

    博客地址:
    https://blog.csdn.net/lowprofile_coding/article/details/77928614

    获取网络权限

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

    xml

    <?xml version="1.0" encoding="utf-8"?>
    <FrameLayout 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/webview"
            android:layout_width="match_parent"
            android:layout_height="match_parent"/>
    
        <ProgressBar
            android:id="@+id/progressbar"
            style="@android:style/Widget.ProgressBar.Horizontal"
            android:layout_width="match_parent"
            android:layout_height="3dip"
            android:max="100"
            android:progress="0"
            android:visibility="gone"/>
    </FrameLayout>
    

    java

    public class MainActivity extends AppCompatActivity {
        private WebView webView;
        private ProgressBar progressBar;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            progressBar= (ProgressBar)findViewById(R.id.progressbar);//进度条
    
            webView = (WebView) findViewById(R.id.webview);
    //        webView.loadUrl("file:///android_asset/test.html");//加载asset文件夹下html
            webView.loadUrl("http://139.196.35.30:8080/OkHttpTest/apppackage/test.html");//加载url
    
            //使用webview显示html代码
    //        webView.loadDataWithBaseURL(null,"<html><head><title> 欢迎您 </title></head>" +
    //                "<body><h2>使用webview显示 html代码</h2></body></html>", "text/html" , "utf-8", null);
    
            webView.addJavascriptInterface(this,"android");//添加js监听 这样html就能调用客户端
            webView.setWebChromeClient(webChromeClient);
            webView.setWebViewClient(webViewClient);
    
            WebSettings webSettings=webView.getSettings();
            webSettings.setJavaScriptEnabled(true);//允许使用js
    
            /**
             * LOAD_CACHE_ONLY: 不使用网络,只读取本地缓存数据
             * LOAD_DEFAULT: (默认)根据cache-control决定是否从网络上取数据。
             * LOAD_NO_CACHE: 不使用缓存,只从网络获取数据.
             * LOAD_CACHE_ELSE_NETWORK,只要本地有,无论是否过期,或者no-cache,都使用缓存中的数据。
             */
            webSettings.setCacheMode(WebSettings.LOAD_NO_CACHE);//不使用缓存,只从网络获取数据.
    
            //支持屏幕缩放
            webSettings.setSupportZoom(true);
            webSettings.setBuiltInZoomControls(true);
    
            //不显示webview缩放按钮
    //        webSettings.setDisplayZoomControls(false);
        }
    
        //WebViewClient主要帮助WebView处理各种通知、请求事件
        private WebViewClient webViewClient=new WebViewClient(){
            @Override
            public void onPageFinished(WebView view, String url) {//页面加载完成
                progressBar.setVisibility(View.GONE);
            }
    
            @Override
            public void onPageStarted(WebView view, String url, Bitmap favicon) {//页面开始加载
                progressBar.setVisibility(View.VISIBLE);
            }
    
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                Log.i("ansen","拦截url:"+url);
                if(url.equals("http://www.google.com/")){
                    Toast.makeText(MainActivity.this,"国内不能访问google,拦截该url",Toast.LENGTH_LONG).show();
                    return true;//表示我已经处理过了
                }
                return super.shouldOverrideUrlLoading(view, url);
            }
    
        };
    
        //WebChromeClient主要辅助WebView处理Javascript的对话框、网站图标、网站title、加载进度等
        private WebChromeClient webChromeClient=new WebChromeClient(){
            //不支持js的alert弹窗,需要自己监听然后通过dialog弹窗
            @Override
            public boolean onJsAlert(WebView webView, String url, String message, JsResult result) {
                AlertDialog.Builder localBuilder = new AlertDialog.Builder(webView.getContext());
                localBuilder.setMessage(message).setPositiveButton("确定",null);
                localBuilder.setCancelable(false);
                localBuilder.create().show();
    
                //注意:
                //必须要这一句代码:result.confirm()表示:
                //处理结果为确定状态同时唤醒WebCore线程
                //否则不能继续点击按钮
                result.confirm();
                return true;
            }
    
            //获取网页标题
            @Override
            public void onReceivedTitle(WebView view, String title) {
                super.onReceivedTitle(view, title);
                Log.i("ansen","网页标题:"+title);
            }
    
            //加载进度回调
            @Override
            public void onProgressChanged(WebView view, int newProgress) {
                progressBar.setProgress(newProgress);
            }
        };
    
        @Override
        public boolean onKeyDown(int keyCode, KeyEvent event) {
            Log.i("ansen","是否有上一个页面:"+webView.canGoBack());
            if (webView.canGoBack() && keyCode == KeyEvent.KEYCODE_BACK){//点击返回按钮的时候判断有没有上一页
                webView.goBack(); // goBack()表示返回webView的上一页面
                return true;
            }
            return super.onKeyDown(keyCode,event);
        }
    
        /**
         * JS调用android的方法
         * @param str
         * @return
         */
        @JavascriptInterface //仍然必不可少
        public void  getClient(String str){
            Log.i("ansen","html调用客户端:"+str);
        }
    
        @Override
        protected void onDestroy() {
            super.onDestroy();
    
            //释放资源
            webView.destroy();
            webView=null;
        }
    }
    
    
  • 相关阅读:
    51nod 1179 最大的最大公约数 (数论)
    POJ 3685 二分套二分
    POJ 3045 贪心
    LIC
    HDU 1029 Ignatius and the Princess IV
    HDU 1024 Max Sum Plus Plus
    HDU 2389 Rain on your Parade
    HDU 2819 Swap
    HDU 1281 棋盘游戏
    HDU 1083 Courses
  • 原文地址:https://www.cnblogs.com/qq874455953/p/10264435.html
Copyright © 2011-2022 走看看