• Android攻城狮 WebView(显示网页)


    使用WebView在界面中显示网页
    通过Intent调用系统浏览器
    Uri uri=Uri.parse(url);//url为链接的地址
    Intent intent=new Intent(Intent.ACTION_VIEW,uri);
    startActivity(intent);
    -----------------------------
    课程目标:通过WebView自制一个简易网页浏览器
    课程内容:
    (1)将WebView加入到你的应用
    (2)使用WebView加载页面
    (3)获取网络访问权限(在AndroidManifest中配置)
    (4)在WebView中使用Javascript
    (5)处理页面加载进程
    (6)后退与前进
    (7)判断页面的加载过程
    (8)WebView缓存的运用(对浏览器的优化)


    要在应用中加入WbeView,只需要在你的活动布局中加入<WebView>元素即可
    <WebView
    	android:id="@+id/webView"
    	android:layout_width="match_parent"
    	android:layout_height="match_parent" />
    加载页面,使用 loadUrl()
    web资源: webView.loadUrl("http://www.baidu.com")
    本地资源: webView。loadUrl("file:///android_asset/xxx.html");本地文件放在asset文件中
    
    //使页面获得焦点
    webView.requestFocus();
    ------------------------
    获取网络访问权限
    在它有效工作之前,要保证应用能访问网络。要访问网络,需要在配置文件中获取INTERNET权限:
    <manifest ...>
    <uses_permission android:name="android.permission.INTERNET" />
    ...
    </manifest>


    在WebView中使用JavaScript
    如果想在webView中加载的web页面使用JavaScript,需要在WebView中启用JavaScript,通过WebView带有的WebSettings来启用它。可以通过getSettings()获取WebSettings的值,然后通过setJavaScriptEnabled()来启用JavaScript。
    webView=(WebView)findViewById(R.id.webView);
    WebSettings webSettings = webView.getSettings();

    我们使用 Toast()来显示当前页面的地址。
    在网页上点击退回时,可能因为网页自身存在请求重定向,所以可能已经跳转了好几个页面,这时我们需要连续点击返回键才能真正退出程序。
    //改写物理按键——返回的逻辑
        @Override
        public boolean onKeyDown(int keyCode, KeyEvent event) {
            if(keyCode== KeyEvent.KEYCODE_BACK){ //KeyEvent.KEYCODE_BACK是常量,KeyEvent还有很多其他常量
                Toast.makeText(this, webView.getUrl(), Toast.LENGTH_SHORT).show();//显示地址
                if(webView.canGoBack()){//如果可以返回,就返回上一页面
                    webView.goBack();
                    return true;
                }
                else{//不能返回,说明已经是首页了,所以就退出程序
                    System.exit(0);//退出
                }
            }
            return super.onKeyDown(keyCode, event);
        }

    webSettings.setJavaScriptEnabled(true);

      1 public class MainActivity extends Activity implements OnClickListener {  
      2       
      3     private String url = null;  
      4     private WebView webView;  
      5     private EditText et_url;  
      6     private Button btn_login;  
      7     private Button btn_back;  
      8     private Button btn_exit;  
      9     private Button btn_forward;  
     10     private Button btn_menu;  
     11   
     12     @Override  
     13     protected void onCreate(Bundle savedInstanceState) {  
     14         super.onCreate(savedInstanceState);  
     15         // 窗口进度条  
     16         requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);  
     17         setContentView(R.layout.fragment_main);  
     18   
     19         setProgressBarIndeterminate(true);  
     20   
     21         webView = (WebView) findViewById(R.id.webView);  
     22         et_url = (EditText) findViewById(R.id.et_url);  
     23         btn_login = (Button) findViewById(R.id.btn_login);  
     24         btn_back = (Button) findViewById(R.id.btn_back);  
     25         btn_exit = (Button) findViewById(R.id.btn_exit);  
     26         btn_forward = (Button) findViewById(R.id.btn_forward);  
     27         btn_menu = (Button) findViewById(R.id.btn_menu);  
     28         // 对五个按钮添加点击监听事件  
     29         btn_login.setOnClickListener(this);  
     30         btn_back.setOnClickListener(this);  
     31         btn_exit.setOnClickListener(this);  
     32         btn_forward.setOnClickListener(this);  
     33         btn_menu.setOnClickListener(this);  
     34     }  
     35   
     36     // btn_login的触发事件 点击后 webView开始读取url  
     37     protected void startReadUrl(String url) {  
     38         // TODO Auto-generated method stub  
     39         // webView加载web资源  
     40         webView.loadUrl(url);  
     41         // 覆盖webView默认通过系统或者第三方浏览器打开网页的行为  
     42         // 如果为false调用系统或者第三方浏览器打开网页的行为  
     43         webView.setWebViewClient(new WebViewClient() {  
     44             @Override  
     45             public boolean shouldOverrideUrlLoading(WebView view, String url) {  
     46                 // TODO Auto-generated method stub  
     47                 // webView加载web资源  
     48                 view.loadUrl(url);  
     49                 return true;  
     50             }  
     51         });  
     52         // 启用支持javascript  
     53         WebSettings settings = webView.getSettings();  
     54         settings.setJavaScriptEnabled(true);  
     55         // web加载页面优先使用缓存加载  
     56         settings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);  
     57         // 当打开页面时 显示进度条 页面打开完全时 隐藏进度条  
     58         webView.setWebChromeClient(new WebChromeClient() {  
     59             @Override  
     60             public void onProgressChanged(WebView view, int newProgress) {  
     61                 // TODO Auto-generated method stub  
     62                 setTitle("本页面已加载" + newProgress + "%");  
     63                 if (newProgress == 100) {  
     64                     closeProgressBar();  
     65                 } else {  
     66                     openProgressBar(newProgress);  
     67                 }  
     68                 super.onProgressChanged(view, newProgress);  
     69             }  
     70         });  
     71     }  
     72   
     73     // 打开进度条  
     74     protected void openProgressBar(int x) {  
     75         // TODO Auto-generated method stub  
     76         setProgressBarIndeterminateVisibility(true);  
     77         setProgress(x);  
     78     }  
     79   
     80     // 关闭进度条  
     81     protected void closeProgressBar() {  
     82         // TODO Auto-generated method stub  
     83         setProgressBarIndeterminateVisibility(false);  
     84     }  
     85   
     86     // 改写物理按键 返回键的逻辑  
     87     @Override  
     88     public boolean onKeyDown(int keyCode, KeyEvent event) {  
     89         // TODO Auto-generated method stub  
     90         if (keyCode == KeyEvent.KEYCODE_BACK) {  
     91             if (webView.canGoBack()) {  
     92                 // 返回上一页面  
     93                 webView.goBack();  
     94                 return true;  
     95             } else {  
     96                 // 退出程序  
     97                 finish();  
     98             }  
     99         }  
    100         return super.onKeyDown(keyCode, event);  
    101     }  
    102   
    103     // 对按钮事件的处理  
    104     @Override  
    105     public void onClick(View v) {  
    106         // TODO Auto-generated method stub  
    107         switch (v.getId()) {  
    108         case R.id.btn_login:  
    109             url = "http://" + et_url.getText().toString();  
    110             url = url.replace(" ", "");  
    111             startReadUrl(url);  
    112             break;  
    113         case R.id.btn_back:  
    114             if (webView.canGoBack()) {  
    115                 webView.goBack();  
    116             } else {  
    117                 finish();  
    118             }  
    119             break;  
    120         case R.id.btn_forward:  
    121             if (webView.canGoForward()) {  
    122                 webView.goForward();  
    123             }  
    124             break;  
    125         case R.id.btn_exit:  
    126             finish();  
    127             break;  
    128         case R.id.btn_menu:  
    129             startReadUrl("http://www.baidu.com");  
    130             break;  
    131         }  
    132     }  
    133 }

     




  • 相关阅读:
    MySQL主从复制报错 Errno 1205
    MySQL添加索引优化SQL
    MySQL通过添加索引解决线上数据库服务器压力大问题
    手把手教你搭建MySQL双主MM+keepalived高可用架构
    SQLSERVER 维护计划无法删除
    Form表单中Post与Get方法的区别
    ASP.NET MVC中常用的ActionResult类型
    Web安全相关(五):SQL注入(SQL Injection)
    Web安全相关(四):过多发布(Over Posting)
    Web安全相关(三):开放重定向(Open Redirection)
  • 原文地址:https://www.cnblogs.com/my334420/p/6710216.html
Copyright © 2020-2023  润新知