Android WebView使用(一)
来源:互联网 发布:孔孝真 赵寅成 知乎 编辑:程序博客网 时间:2024/05/19 06:46
前言
Android内置webkit内核的高性能浏览器,而WebView则是在这个基础上进行封装后的一个 控件,WebView直译网页视图,我们可以简单的看作一个可以嵌套到界面上的一个浏览器控件!
WebView有三个重要的类:WebChromeClient,WebViewClient,WebSettings
WebChromeClient:辅助WebView处理Javascript的对话框、网站图标、网站title、加载进度等!
WebViewClient:辅助WebView处理各种通知与请求事件!
WebSettings:WebView相关配置的设置,比如setJavaScriptEnabled()设置是否允许JS脚本执行
简单实用
使用一:加载一个简单的网页
效果图:
public class MainActivity extends AppCompatActivity { private WebView webView; private long exitTime = 0; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); webView = new WebView(this); webView.setWebViewClient(new WebViewClient() { //设置在webView点击打开的新网页在当前界面显示,而不跳转到新的浏览器中 @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return true; } }); webView.getSettings().setJavaScriptEnabled(true); //设置WebView属性,运行执行js脚本 webView.loadUrl("http://www.baidu.com/"); //调用loadView方法为WebView加入链接 setContentView(webView); //调用Activity提供的setContentView将webView显示出来 } //我们需要重写回退按钮的时间,当用户点击回退按钮: //1.webView.canGoBack()判断网页是否能后退,可以则goback() //2.如果不可以连续点击两次退出App,否则弹出提示Toast @Override public void onBackPressed() { if (webView.canGoBack()) { webView.goBack(); } else { if ((System.currentTimeMillis() - exitTime) > 2000) { Toast.makeText(getApplicationContext(), "再按一次退出程序", Toast.LENGTH_SHORT).show(); exitTime = System.currentTimeMillis(); } else { super.onBackPressed(); } } }}
使用二:布局代码中设置WebView
效果图
package com.example.hfs.webviewsimpledemo;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.webkit.WebChromeClient;import android.webkit.WebView;import android.webkit.WebViewClient;import android.widget.Button;import android.widget.TextView;import android.widget.Toast;public class MainActivity extends AppCompatActivity implements View.OnClickListener { private Button btnBack; private TextView txtTitle; private Button btnTop; private Button btnRefresh; private WebView wView; private long exitTime = 0; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); } private void initView() { btnBack= (Button) findViewById(R.id.btn_back); btnTop= (Button) findViewById(R.id.btn_top); btnRefresh= (Button) findViewById(R.id.btn_refresh); txtTitle= (TextView) findViewById(R.id.txt_title); wView= (WebView) findViewById(R.id.wView); btnBack.setOnClickListener(this); btnRefresh.setOnClickListener(this); btnTop.setOnClickListener(this); wView.loadUrl("http://www.baidu.com"); wView.setWebChromeClient(new WebChromeClient(){ @Override public void onReceivedTitle(WebView view, String title) { super.onReceivedTitle(view, title); txtTitle.setText(title); } }); wView.setWebViewClient(new WebViewClient() { //在webview里打开新链接 @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return true; } }); } //我们需要重写回退按钮的时间,当用户点击回退按钮: //1.webView.canGoBack()判断网页是否能后退,可以则goback() //2.如果不可以连续点击两次退出App,否则弹出提示Toast @Override public void onBackPressed() { if (wView.canGoBack()) { wView.goBack(); } else { if ((System.currentTimeMillis() - exitTime) > 2000) { Toast.makeText(getApplicationContext(), "再按一次退出程序", Toast.LENGTH_SHORT).show(); exitTime = System.currentTimeMillis(); } else { super.onBackPressed(); } } } @Override public void onClick(View view) { switch (view.getId()) { case R.id.btn_back: finish(); //关闭当前Activity break; case R.id.btn_refresh: wView.reload(); //刷新当前页面 break; case R.id.btn_top: wView.setScrollY(0); //滚动到顶部 break; } }}
布局文件:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:padding="5dp" tools:context=".MainActivity"> <RelativeLayout android:layout_width="match_parent" android:layout_height="48dp" android:background="#2D97CB"> <Button android:id="@+id/btn_back" android:layout_width="64dp" android:layout_height="48dp" android:layout_alignParentLeft="true" android:text="Back" /> <Button android:id="@+id/btn_top" android:layout_width="64dp" android:layout_height="48dp" android:layout_alignParentRight="true" android:text="Top" /> <Button android:id="@+id/btn_refresh" android:layout_width="64dp" android:layout_height="48dp" android:layout_toLeftOf="@id/btn_top" android:text="刷新" /> <TextView android:id="@+id/txt_title" android:layout_width="match_parent" android:layout_height="48dp" android:layout_toLeftOf="@id/btn_refresh" android:layout_toRightOf="@id/btn_back" android:gravity="center" android:singleLine="true" android:text="新闻" android:textColor="#FFFFFF" android:textSize="18sp" /> </RelativeLayout> <WebView android:id="@+id/wView" android:layout_width="match_parent" android:layout_height="match_parent" /></LinearLayout>
注意:这里涉及到一个重定向的问题,可能点两次返回都没有退出App,解决办法:我们只需将 shouldOverrideUrlLoading里的东东删掉,然后写上return false;即可!
使用三:设置缩放以及自适应屏幕
WebSettings settings = wView.getSettings();settings.setUseWideViewPort(true);//设定支持viewportsettings.setLoadWithOverviewMode(true); //自适应屏幕settings.setBuiltInZoomControls(true);settings.setDisplayZoomControls(false);settings.setSupportZoom(true);//设定支持缩放
//去掉缩放控件settings.setDisplayZoomControls(false);
如果时对字体进行缩放,则可以这样:
settings.setTextZoom(int);
也可以直接设置字体:
settings.setTextSize(TextSize.LARGER);
这里,Android自带五个可选字体大小的值:SMALLEST(50%),SMALLER(75%),NORMAL(100%),LARGER(150%), LARGEST(200%)。
使用四:获取WebView的Cookie数据
我们都知道Cookie其实只是一个代表用户唯一标识的字符串,情景一般是: 用户输入账号密码后,点击登陆,用户要拿着这个Cookie去访问服务器提供的相关服务! 我们可以把cookie的获取写到onPageFinsihed的方法中:
@Overridepublic void onPageFinished(WebView view, String url) { CookieManager cookieManager = CookieManager.getInstance(); String CookieStr = cookieManager.getCookie(url); Log.e("HEHE", "Cookies = " + CookieStr); super.onPageFinished(view, url);}
使用五:设置WebView的Cookie数据
我们上面获取到了Cookie或者通过其他途径获得了Cookie,我们如何为WebView设置Cookie呢? 我们可以在需要设置Cookie的地方加入下述代码:
CookieSyncManager.createInstance(MainActivity.this); CookieManager cookieManager = CookieManager.getInstance(); cookieManager.setAcceptCookie(true); cookieManager.setCookie(url, cookies); //cookies是要设置的cookie字符串 CookieSyncManager.getInstance().sync();
注意:上述代码需要写在loadUrl()之前,而且如果设置了Cookie了,尽量别再进行其他的设置 不然可能会无效,建议设置cookie的写在webView相关设置的最后面,loadUrl()之前!
- Android WebView使用(一)
- Android WebView使用(一)
- Android中的WebView使用(一)
- Android:控件WebView使用(一)
- Android WebView使用解析一
- Android webview控件(一) 使用webview开发浏览器实例
- Android WebView的使用(一)
- android WebView(一)基本使用
- Android控件使用:WebView(一)
- 一、Android的webview的简单使用
- Android WebView使用精解(一)
- Android WebView的使用(一)
- Android笔记(一):使用WebView
- Android WebView使用笔记(一)
- Android WebView(一) WebView详解
- android WebView使用 一 (简单使用在程序中)
- WebView--- Android WebView使用总结
- (一) Android WebView是什么?
- 高斯消元模版
- STM32F103C8开发USART通信(二)
- 常用的正则表达式
- JZOJ4696.第四次忍者大战
- 【连载】研究EasyUI系统——Form组件
- Android WebView使用(一)
- centos7+php+mysql5.6环境搭建
- 正则表达式验证是否是手机号
- redis之 zadd、zremrangebyscore、zremrangebyrank、zscore、zcard、zcount、zrangebyscore、zinczrevrankzrevrange
- java字符串拼接实况
- 如何从官网下载eclipse各种不同版本
- Android使用IntentService执行异步任务
- 五类排序算法(插入,交换,选择,归并)
- windows核心编程-第一章 对程序错误的处理