Android WebView 基础

描述

WebView是Android系统中内置了的一款高性能webkit内核浏览器,在SDK中封装为一个叫做WebView组件。

用途

应用内嵌浏览器,并显示网页内容。
android 自带的 textview 不支持长按文本复制,webview 自带长按复制文本内容的功能。
应用在内容显示上,对动画的丰富性要求较高,可以使用 webview 加载支持javascript的网页显示动画内容。

所需应用权限

AndroidManifest.xml 需要添加 "android.permission.INTERNET"权限。

开发相关

XML文件中显示webview组件。

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

加载内容

webView.loadUrl(url);
webView.loadUrl(url, extraHeaders);
webView.loadData(data, mimeType, encoding);
webView.loadDataWithBaseURL(baseUrl, data, mimeType, encoding, historyUrl);

设置属性

WebSettings setting = webView.getSettings();
setting.setSupportZoom(true);//支持缩放
setting.setTextSize(TextSize);//页面中字体大小 --TextSize.LARGER
setting.setJavaScriptEnabled(true);//对javascript的支持

webview显示网页的前进与后退

webView.canGoBack();
webView.goBack(); //后退
webView.canGoForward();
webView.goForward(); //前进

//ps:使用webview浏览网页,点击系统“Back”键会finish()activity,因此
//需要拦截返回键的监听
public boolean onKeyDown(int keyCode, KeyEvent event) {       
        if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()) {       
            webView.goBack();       
                   return true;       
        }       
        return super.onKeyDown(keyCode, event);       
    }

当网页中有链接时,如果希望不点击链接继续在当前webview里面显示内容,而不是打开系统浏览器或者第三方浏览器,需要设置WebViewClient属性。

webView.setWebViewClient(new WebViewClient(){       
                    public boolean shouldOverrideUrlLoading(WebView view, String url) {       
                        view.loadUrl(url);       
                        return true;       
                    }       
        });

监听页面中javascript中的简单事件

//demo.html
<html>       
  <mce:script language="javascript"><!--     
       
      function wave() {       
          document.getElementById("droid").src="android_waving.png";       
      }       
             
</mce:script>       
      <body>       
      <a onClick="window.demo.clickOnAndroid()">       
          <img id="droid" src="android_normal.png" mce_src="android_normal.png"/><br>       
              Click me!       
      </a>       
      </body>       
</html> 

//android代码
public class WebViewDemo extends Activity {        
    private WebView mWebView;       
    private Handler mHandler = new Handler();       
       
    public void onCreate(Bundle icicle) {       
        super.onCreate(icicle);       
        setContentView(R.layout.webviewdemo);       
        mWebView = (WebView) findViewById(R.id.webview);       
        WebSettings webSettings = mWebView.getSettings();       
        webSettings.setJavaScriptEnabled(true);       
        mWebView.addJavascriptInterface(new Object() {       
            public void clickOnAndroid() {//html中的方法       
                mHandler.post(new Runnable() {       
                    public void run() {       
                        mWebView.loadUrl("javascript:wave()");       
                    }       
                });       
            }       
        }, "demo");       
        mWebView.loadUrl("file:///android_asset/demo.html");       
    }       
}

1、为了让WebView从apk文件中加载assets,Android SDK提供了一个schema,前缀为"file:///android_asset/"。WebView遇到这样的schema,就去当前包中的 assets目录中找内容。如上面的"file:///android_asset/demo.html"
2、addJavascriptInterface方法中要绑定的Java对象及方法要运行另外的线程中,不能运行在构造他的线程中,这也是使用 Handler的目的。

对html5视频播放及全屏的支持,需要自定义WebChromeClient,重写onShowCustomView(),和onHideCustomView()方法。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 177,239评论 25 709
  • ¥开启¥ 【iAPP实现进入界面执行逐一显】 〖2017-08-25 15:22:14〗 《//首先开一个线程,因...
    小菜c阅读 11,939评论 0 17
  • 文/冬月之恋 春天的一个后半夜,一场大雨过后,云收雨霁。月亮出来了,流水般的月光静静地倾泄在这一片寂静的山野上。 ...
    冬月之恋阅读 3,757评论 1 7
  • 作者:(美)马歇尔,(美)约翰斯顿著, 符国群,唐晓祎,贾婷彦译 出版社:北京大学出版社 出版时间:...
    Sophie_Z阅读 8,245评论 0 5
  • 其实在我的生命中,从来没有家庭暴力的概念,直到最近。 我有个堂妹,结婚较早,儿子一岁半。我们虽然在一个地方缺很少见...
    雪e阅读 1,513评论 0 0

友情链接更多精彩内容