• 利用HTML5开发Android(2)---Android中构建HTML5应用


    使用WebView控件 与其他控件的使用方法相同 在layout中使用一个<WebView>标签

    WebView不包括导航栏,地址栏等完整浏览器功能,只用于显示一个网页

    在WebView中加载Web页面,使用loadUrl()

    1 WebView myWebView = (WebView) findViewById(R.id.webview);   
    2 myWebView.loadUrl("http://www.example.com");  
    View Code

    注意在manifest文件中加入访问互联网的权限:

    Xml代码  
    1 <uses-permission android:name="android.permission.INTERNET" />  
    View Code
    在Android中点击一个链接,默认是调用应用程序来启动,因此WebView需要代为处理这个动作 通过WebViewClient
    Java代码  
     1 //设置WebViewClient   
     2 webView.setWebViewClient(new WebViewClient(){      
     3     public boolean shouldOverrideUrlLoading(WebView view, String url) {      
     4         view.loadUrl(url);      
     5         return true;      
     6     }     
     7     public void onPageFinished(WebView view, String url) {   
     8             super.onPageFinished(view, url);   
     9     }   
    10     public void onPageStarted(WebView view, String url, Bitmap favicon) {   
    11         super.onPageStarted(view, url, favicon);   
    12     }   
    13 });  
    View Code
    这个WebViewClient对象是可以自己扩展的,例如
    Java代码
    private class MyWebViewClient extends WebViewClient {   
        public boolean shouldOverrideUrlLoading(WebView view, String url) {   
            if (Uri.parse(url).getHost().equals("www.example.com")) {   
                return false;   
            }   
            Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));   
        startActivity(intent);   
        return true;   
        }   
    }  
    View Code
    之后:
    Java代码 
    1 WebView myWebView = (WebView) findViewById(R.id.webview);   
    2 myWebView.setWebViewClient(new MyWebViewClient());  

    另外出于用户习惯上的考虑 需要将WebView表现得更像一个浏览器,也就是需要可以回退历史记录

    因此需要覆盖系统的回退键 goBack,goForward可向前向后浏览历史页面

    Java代码  
    1 public boolean onKeyDown(int keyCode, KeyEvent event) {   
    2     if ((keyCode == KeyEvent.KEYCODE_BACK) && myWebView.canGoBack() {   
    3         myWebView.goBack();   
    4         return true;   
    5     }   
    6     return super.onKeyDown(keyCode, event);   
    7 }  

    Java代码

    1 WebView myWebView = (WebView) findViewById(R.id.webview);   
    2 WebSettings webSettings = myWebView.getSettings();   
    3 webSettings.setJavaScriptEnabled(true);  
    (这里的webSetting用处非常大 可以开启很多设置 在之后的本地存储,地理位置等之中都会使用到)
    1 在JS中调用Android的函数方法
    首先 需要在Android程序中建立接口
    Java代码
     1 final class InJavaScript {   
     2        public void runOnAndroidJavaScript(final String str) {   
     3         handler.post(new Runnable() {   
     4                public void run() {    
     5                    TextView show = (TextView) findViewById(R.id.textview);   
     6                    show.setText(str);   
     7                }   
     8            });   
     9        }   
    10    }  

    Java代码

    1 /把本类的一个实例添加到js的全局对象window中,   
    2 //这样就可以使用windows.injs来调用它的方法   
    3 webView.addJavascriptInterface(new InJavaScript(), "injs");  
    在JavaScript中调用
    Js代码
    1 function sendToAndroid(){   
    2         var str = "Cookie call the Android method from js";   
    3         windows.injs.runOnAndroidJavaScript(str);//调用android的函数   
    4 }   
    2 在Android中调用JS的方法
     
    JS中的方法
    Js代码
    1 function getFromAndroid(str){   
    2         document.getElementByIdx_x_x_x("android").innerHTML=str;   
    3 }  
    Android调用该方法
    Java代码
    1 Button button = (Button) findViewById(R.id.button);   
    2        button.setOnClickListener(new OnClickListener() {   
    3        public void onClick(View arg0) {   
    4             //调用javascript中的方法   
    5            webView.loadUrl("javascript:getFromAndroid('Cookie call the js function from Android')");   
    6        }   
    7    });  
    3 Android中处理JS的警告,对话框等
    在Android中处理JS的警告,对话框等需要对WebView设置WebChromeClient对象
    Java代码  
     1 //设置WebChromeClient   
     2 webView.setWebChromeClient(new WebChromeClient(){   
     3     //处理javascript中的alert   
     4     public boolean onJsAlert(WebView view, String url, String message, final JsResult result) {   
     5         //构建一个Builder来显示网页中的对话框   
     6         Builder builder = new Builder(MainActivity.this);   
     7         builder.setTitle("Alert");   
     8         builder.setMessage(message);   
     9         builder.setPositiveButton(android.R.string.ok,   
    10             new AlertDialog.OnClickListener() {   
    11                 public void onClick(DialogInterface dialog, int which) {   
    12                     result.confirm();   
    13                 }   
    14             });   
    15         builder.setCancelable(false);   
    16         builder.create();   
    17         builder.show();   
    18         return true;   
    19     };   
    20     //处理javascript中的confirm   
    21     public boolean onJsConfirm(WebView view, String url, String message, final JsResult result) {   
    22         Builder builder = new Builder(MainActivity.this);   
    23         builder.setTitle("confirm");   
    24         builder.setMessage(message);   
    25         builder.setPositiveButton(android.R.string.ok,   
    26             new AlertDialog.OnClickListener() {   
    27                 public void onClick(DialogInterface dialog, int which) {   
    28                     result.confirm();   
    29                 }   
    30             });   
    31         builder.setNegativeButton(android.R.string.cancel,   
    32             new DialogInterface.OnClickListener() {   
    33                 public void onClick(DialogInterface dialog, int which) {   
    34                     result.cancel();   
    35                 }   
    36             });   
    37         builder.setCancelable(false);   
    38         builder.create();   
    39         builder.show();   
    40         return true;   
    41     };   
    42            
    43     @Override  
    44     //设置网页加载的进度条   
    45     public void onProgressChanged(WebView view, int newProgress) {   
    46         MainActivity.this.getWindow().setFeatureInt(Window.FEATURE_PROGRESS, newProgress * 100);   
    47         super.onProgressChanged(view, newProgress);   
    48     }   
    49   
    50     //设置应用程序的标题title   
    51     public void onReceivedTitle(WebView view, String title) {   
    52         MainActivity.this.setTitle(title);   
    53         super.onReceivedTitle(view, title);   
    54     }   
    55 });  
  • 相关阅读:
    深度学习中常见问题
    freespace
    跑superpixel的程序
    python处理图片的一些操作
    跑edgebox
    tensorflow安装
    matlab启动
    stixel 理解
    stixel-world跑在kitti数据集
    小议中国人的乡土情结
  • 原文地址:https://www.cnblogs.com/lvfeilong/p/3543fdgdgf.html
Copyright © 2020-2023  润新知