zoukankan      html  css  js  c++  java
  • Android中使用WebView, WebChromeClient和WebViewClient加载网页

    在android应用中,有时要加载一个网页,如果能配上一个进度条就更好了,而android
    中提供了其很好的支持,下面是一个例子程序,先帖:

    <?xml version=”1.0″ encoding=”utf-8″?>
    <WebView xmlns:android=”http://schemas.android.com/apk/res/android”
    android:id=”@+id/webView” android:layout_width=”fill_parent”
    android:layout_height=”fill_parent” />

    主程序:

    Java代码 

    public class WebPageLoader extends Activity
    {
    final Activity activity = this;
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
    super.onCreate(savedInstanceState);
    this.getWindow().requestFeature(Window.FEATURE_PROGRESS);
    setContentView(R.layout.main);
    WebView webView = (WebView) findViewById(R.id.webView);
    webView.getSettings().setJavaScriptEnabled(true);
    webView.getSettings().setSupportZoom(true);
    webView.setWebChromeClient(new WebChromeClient()
    {
    public void onProgressChanged(WebView view, int progress)
    {
    activity.setTitle(“Loading…”);
    activity.setProgress(progress * 100);
    if(progress == 100)
    activity.setTitle(R.string.app_name);
    }
    }
    );
    webView.setWebViewClient(new WebViewClient() {
    public void onReceivedError(WebView view, int errorCode, String description, String failingUrl)
    { // Handle the error
    }
    public boolean shouldOverrideUrlLoading(WebView view, String url)
    {
    view.loadUrl(url);
    return true;
    }
    });
    webView.loadUrl(“http://www.sohu.com”);
    }
    }

    要注意的是,其中的webView的一系列用法,比如 webView.getSettings().setJavaScriptEnabled(true);设置可以使用javscript;

    webView.getSettings().setJavaScriptEnabled(true);
    webView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);
    webView.setHorizontalScrollBarEnabled(false);
    webView.getSettings().setSupportZoom(true);
    webView.getSettings().setBuiltInZoomControls(true);
    webView.setInitialScale(70);
    webView.setHorizontalScrollbarOverlay(true);

    等等,具体参考API

    而进度条的使用是在new出一个setWebChromeClient后,可以在内部类中写
    onProgressChanged事件

    而引用另外兄弟的文中说的,这几者的关系,转一下:

    http://www.iteye.com/topic/377294

    在WebView的设计中,不是什么事都要WebView类干的,有些杂事是分给其他人的,这样WebView专心干好自己的解析、渲染工作就行了。WebViewClient就是帮助WebView处理各种通知、请求事件的,具体来说包括:

    onLoadResource

    onPageStart

    onPageFinish

    onReceiveError

    onReceivedHttpAuthRequest

    WebChromeClient是辅助WebView处理Javascript的对话框,网站图标,网站title,加载进度等

    onCloseWindow(关闭WebView)

    onCreateWindow()

    onJsAlert (WebView上alert是弹不出来东西的,需要定制你的WebChromeClient处理弹出)

    onJsPrompt

    onJsConfirm

    onProgressChanged

    onReceivedIcon

    onReceivedTitle

  • 相关阅读:
    读书笔记之理想设计的特征
    一些javascript 变量声明的 疑惑
    LINQ 使用方法
    Google MySQL tool releases
    读书笔记之设计的层次
    EF之数据库连接问题The specified named connection is either not found in the configuration, not intended to be used with the Ent
    转载 什么是闭包
    javascript面向对象起步
    Tips
    数据结构在游戏中的应用
  • 原文地址:https://www.cnblogs.com/beceo/p/2390156.html
Copyright © 2011-2022 走看看