Android WebView常用方法

package com.orgcent.webview;

import android.app.Activity;
import android.os.Bundle;
import android.webkit.JsPromptResult;
import android.webkit.JsResult;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.webkit.WebSettings.LayoutAlgorithm;

public class AndroidWebViewActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        WebView content_wv = (WebView) findViewById(R.id.content_wv);
        WebSettings ws = content_wv.getSettings();
        ws.setJavaScriptEnabled(true); // 设置支持javascript脚本
        ws.setAllowFileAccess(true); // 允许访问文件
        ws.setBuiltInZoomControls(true); // 设置显示缩放按钮
        ws.setSupportZoom(true); //支持缩放

        /**
         * 用WebView显示图片,可使用这个参数
         * 设置网页布局类型:
         * 1、LayoutAlgorithm.NARROW_COLUMNS : 适应内容大小
         * 2、LayoutAlgorithm.SINGLE_COLUMN:适应屏幕,内容将自动缩放
         */
        ws.setLayoutAlgorithm(LayoutAlgorithm.NARROW_COLUMNS);
        ws.setDefaultTextEncodingName("utf-8"); //设置文本编码
        ws.setAppCacheEnabled(true);
        ws.setCacheMode(WebSettings.LOAD_DEFAULT);//设置缓存模式

        //添加Javascript调用java对象
        content_wv.addJavascriptInterface(this, "java2js");
        content_wv.setWebViewClient(new WebViewClientDemo());
        content_wv.setWebChromeClient(new WebViewChromeClientDemo());
        //设置打开的网页
        content_wv.loadUrl("http://orgcent.com");
        //使用WebView来显示图片
        content_wv.loadData("<img src='http://orgcent.com'/>", "text/html", "utf8");
    }

    private class WebViewClientDemo extends WebViewClient {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            view.loadUrl(url);// 当打开新链接时,使用当前的 WebView,不会使用系统其他浏览器
            return true;
        }
    }

    private class WebViewChromeClientDemo extends WebChromeClient {
        // 设置网页加载的进度条
        public void onProgressChanged(WebView view, int newProgress) {
        }

        // 获取网页的标题
        public void onReceivedTitle(WebView view, String title) {
        }

        // JavaScript弹出框
        @Override
        public boolean onJsAlert(WebView view, String url, String message,
                JsResult result) {
            return super.onJsAlert(view, url, message, result);
        }

        // JavaScript输入框
        @Override
        public boolean onJsPrompt(WebView view, String url, String message,
                String defaultValue, JsPromptResult result) {
            return super.onJsPrompt(view, url, message, defaultValue, result);
        }

        // JavaScript确认框
        @Override
        public boolean onJsConfirm(WebView view, String url, String message,
                JsResult result) {
            return super.onJsConfirm(view, url, message, result);
        }
    }

}


(1)// 设置支持javascript脚本

   mWebView.getSettings().setJavaScriptEnabled(true);

(2)// 支持通过js打开新的窗口  

 mWebView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true); 

(3)当我们加载Html时候,会在我们data/应用package下生成database与cache两个文件夹:

     1、缓存构成
/data/data/package_name/cache/
/data/data/package_name/database/webview.db

/data/data/package_name/database/webviewCache.db

  缓存模式(5种)
LOAD_CACHE_ONLY:  不使用网络,只读取本地缓存数据
LOAD_DEFAULT:  根据cache-control决定是否从网络上取数据。
LOAD_CACHE_NORMAL: API level 17中已经废弃, 从API level 11开始作用同LOAD_DEFAULT模式
LOAD_NO_CACHE: 不使用缓存,只从网络获取数据.
LOAD_CACHE_ELSE_NETWORK,只要本地有,无论是否过期,或者no-cache,都使用缓存中的数据。

eg:mWebView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);

—————————————————————————————————————————————————————————————

(4)mWebView.getSettings().setLayoutAlgorithm(WebSettings.LayoutAlgorithm.NARROW_COLUMNS);

1.这段代码设定了WebView的HTML布局方式,其中包含了下面的三个参数值 
NORMAL:正常显示,没有渲染变化。 
SINGLE_COLUMN:把所有内容放到WebView组件等宽的一列中。   //这个是强制的,把网页都挤变形了 
NARROW_COLUMNS:可能的话,使所有列的宽度不超过屏幕宽度。 //好像是默认的 

2.Android中Webview自适应屏幕

第一种:

     WebSetting settings = webView.getSettings();
     settings.setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN);
     把所有内容放在webview等宽的一列中。(可能会出现页面中链接失效)
 
第二种:
     settings.setUseWideViewPort(true);
     settings.setLoadWithOverviewMode(true);
 
第三种:
     DisplayMetrics metrics = new DisplayMetrics();
     getWindowManager().getDefaultDisplay().getMetrics(metrics);
     int mDensity = metrics.densityDpi;www.2cto.com
 
     if (mDensity == 120) {
               settings.setDefaultZoom(ZoomDensity.CLOSE);
          }else if (mDensity == 160) {
               settings.setDefaultZoom(ZoomDensity.MEDIUM);
          }else if (mDensity == 240) {
               settings.setDefaultZoom(ZoomDensity.FAR);
          }

—————————————————————————————————————————————————————————————

(5)mWebView.setHorizontalScrollBarEnabled(true);  mWebView.setVerticalScrollBarEnabled(true);  //设置是否显示滚动条

(6)mWebView.getSettings().setUserAgentString(USER_AGENT_STRING);// 设置支持各种不同的设备

(7)WebView显示html文件时,若要达到和PC上浏览器显示的效果完全一样,只需对WebView做一下设置即可:

适应全屏 

39 适应竖屏   

57 适应横屏     

mWebView.setInitialScale(39); 

注意的是:html如果字体太小则在Android手机上显示的就很小。一般为6、7号字体

eg:mWebView.setInitialScale(39);—————————————————————————————————————————————————————————————

(8)1.setPluginsEnabled现在已经不再支持,改为WebView.getSettings().setPluginState(WebSettings.PluginState.ON);,不过18版本以后也不再支持了因为adobe 不再开发flash新的移动版了。

eg:mWebView.getSettings().setPluginState(WebSettings.PluginState.ON);

(9)mWebView.getSettings().setDefaultTextEncodingName("GB2312") ; //设置字符编码集

(10)设置该视图的滚动模式 void setOverScrollMode(int mode)

    eg:mWebView.setOverScrollMode(View.OVER_SCROLL_IF_CONTENT_SCROLLS);

(11) mWebView.setScrollBarStyle //设置滚动条风格 

   eg:mWebView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY); //取消滚动条

(12)mWebView.getSettings().setSupportZoom(true); // 设置可以支持缩放

(13)mWebView.getSettings().setBuiltInZoomControls(true);// 设置出现缩放工具

(14)webview.requestFocusFromTouch(); 如果webView中需要用户手动输入用户名、密码或其他,则webview必须设置支持获取手势焦点。

(15)//mWebView.loadUrl("http://www.pconline.com.cn/"); //设置加载页面


实例:

package com.channel.economic.ui;

import android.annotation.SuppressLint;
import android.content.Intent;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import butterknife.ButterKnife;
import butterknife.InjectView;

import com.channel.economic.Config;
import com.channel.economic.R;
import com.channel.economic.util.Log;
import com.channel.economic.view.ProgressWebView;

/**
 * webview
 *
 * Created by huagt on 14-12-21.
 */
public class WebViewUI extends AbsActionUI {

    /**
     * 需要加载的网页
     */
    public static final String KEY_LOAD_URL = "key:load_url";

    /**
     * 需要显示的标题名
     */
    public static final String KEY_CONTENT_NAME = "key:cntent_name";

    @InjectView(R.id.web_view) ProgressWebView mWebView;
    private String mCurrentLoadUrl;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_webview);
        ButterKnife.inject(this);
        mCurrentLoadUrl = getIntent().getStringExtra(KEY_LOAD_URL);
        String title = getIntent().getStringExtra(KEY_CONTENT_NAME);


        setTitle(title);
        initWebView();
    }

    /**
     * 初始化WebView组件
     */
    @SuppressLint({"AddJavascriptInterface", "SetJavaScriptEnabled"}) private void initWebView() {
        mWebView.getSettings().setJavaScriptEnabled(true);
        mWebView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
        mWebView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
        mWebView.getSettings().setLayoutAlgorithm(WebSettings.LayoutAlgorithm.NARROW_COLUMNS);
        mWebView.setHorizontalScrollBarEnabled(true);
        mWebView.setVerticalScrollBarEnabled(true);
        final String USER_AGENT_STRING = mWebView.getSettings()
                .getUserAgentString() + " Rong/2.0";
        mWebView.getSettings().setUserAgentString(USER_AGENT_STRING);
        //mWebView.setInitialScale(39);

        mWebView.getSettings().setPluginState(WebSettings.PluginState.ON);
        mWebView.getSettings().setDefaultTextEncodingName("GB2312") ;
        mWebView.setWebViewClient(viewClient);
        mWebView.setOverScrollMode(View.OVER_SCROLL_IF_CONTENT_SCROLLS);
        //设置WebView的一些缩放功能点
        mWebView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);
        //自适应屏幕
        //mWebView.getSettings().setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN);
        mWebView.getSettings().setLoadWithOverviewMode(true);
        // 设置可以支持缩放
        mWebView.getSettings().setSupportZoom(true);
        // 设置出现缩放工具
        mWebView.getSettings().setBuiltInZoomControls(true);

        mWebView.requestFocus();

        //mCurrentLoadUrl = "http://2015zh.hk001.china-dxz.net/web/";
        mWebView.(mCurrentLoadUrl);
        //mWebView.loadUrl("http://www.pconline.com.cn/");
    }

    /**
     * WebView加载状态客户端回调
     */
    private WebViewClient viewClient = new WebViewClient() {
        @Override
        public void onPageStarted(WebView view, String url, Bitmap favicon) {

        }

        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            if (url.contains("tb.jsp")) {
                makeToast("付款成功!");
                setResult(RESULT_OK);
                Intent orderIntent = new Intent(WebViewUI.this,MineOrdersUI.class);
                startActivity(orderIntent);
                WebViewUI.this.finish();
            } else {
                view.loadUrl(url);
            }

            return true;
        }

        @Override
        public void onReceivedError(WebView view, int errorCode, String description,
                                    String failingUrl) {
            //view.loadUrl("file:///android_asset/404.html");
        }
    };
}


  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值