WebView 常用设置【示例】


在控件中打开网页
    mWebView.setWebViewClient( new  WebViewClient(){
              @Override
              public boolean shouldOverrideUrlLoading(WebView view, String url) {
                  view.loadUrl(url);
                  return true;
              }
          });


简介WebClient方法全解

WebViewClient 的方法全解

  • doUpdateVisitedHistory(WebView view, String url, boolean isReload)  //(更新历史记录) 
  • onFormResubmission(WebView view, Message dontResend, Message resend) //(应用程序重新请求网页数据) 
  • onLoadResource(WebView view, String url) // 在加载页面资源时会调用,每一个资源(比如图片)的加载都会调用一次。 
  • onPageStarted(WebView view, String url, Bitmap favicon) //这个事件就是开始载入页面调用的,通常我们可以在这设定一个loading的页面,告诉用户程序在等待网络响应。 
  • onPageFinished(WebView view, String url) //在页面加载结束时调用。同样道理,我们知道一个页面载入完成,于是我们可以关闭loading 条,切换程序动作。 
  • onReceivedError(WebView view, int errorCode, String description, String failingUrl)// (报告错误信息) 
  • onReceivedHttpAuthRequest(WebView view, HttpAuthHandler handler, String host,String realm)//(获取返回信息授权请求)          
  • onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) //重写此方法可以让webview处理https请求。         
  • onScaleChanged(WebView view, float oldScale, float newScale) // (WebView发生改变时调用) 
  • onUnhandledKeyEvent(WebView view, KeyEvent event) //(Key事件未被加载时调用) 
  • shouldOverrideKeyEvent(WebView view, KeyEvent event)//重写此方法才能够处理在浏览器中的按键事件。 
  • shouldOverrideUrlLoading(WebView view, String url)  //在点击请求的是链接时才会调用,重写此方法返回true表明点击网页里面的链接还是在当前的webview里跳转,不跳到浏览器那边。这个函数我们可以做很多操作,比如我们读取到某些特殊的URL,于是就可以不打开地址,取消这个操作,进行预先定义的其他操作,这对一个程序是非常必要的


按返回键时返回上一个浏览页面
     @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK && wv.canGoBack()) {
            wv.goBack();
            return true;
        }
        return super.onKeyDown(keyCode, event);
    }


其他属性
打开页面时, 自适应屏幕

wv.getSettings().setUseWideViewPort(true);//设置此属性,可任意比例缩放

             wv.getSettings().setLoadWithOverviewMode(true);

页面支持缩放

wv.getSettings().setJavaScriptEnabled(true);//支持javascript

             wv.getSettings().setBuiltInZoomControls(true);
             wv.getSettings().setSupportZoom(true);

其他属性

  • setJavaScriptEnabled(true);  //支持js
  • setPluginsEnabled(true);  //支持插件 
  • setUseWideViewPort(false);  //将图片调整到适合webview的大小 
  • setSupportZoom(true);  //支持缩放 
  • setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN); //支持内容重新布局  
  • setSupportMultipleWindows(true); //多窗口 
  • setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);  //关闭webview中缓存 
  • setAllowFileAccess(true);  //设置可以访问文件 
  • setNeedInitialFocus(true); //当webview调用requestFocus时为webview设置节点
  • webview webSettings.setBuiltInZoomControls(true); //设置支持缩放 
  • setJavaScriptCanOpenWindowsAutomatically(true); //支持通过JS打开新窗口 
  • setLoadWithOverviewMode(true); // 缩放至屏幕的大小
  • setLoadsImagesAutomatically(true);  //支持自动加载图片


示例代码-Activity
public class WebLoadActivity extends Activity implements OnClickListener {
    public static final String URL = "http://www.163.com/";
    public static final String TITLE = "标题";
    public static final String JS_INTERFACE = "Android";//JS调用类名
    private WebView webview;
    private ProgressBar progress_bar;
    private TextView tv_back;
    private TextView tv_title;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.webview);
        initViews();
        initWebView();
    }
    private void initViews() {
        progress_bar = (ProgressBar) findViewById(R.id.progress_bar);
        webview = (WebView) findViewById(R.id.webview);
        tv_back = (TextView) findViewById(R.id.tv_back);
        tv_title = (TextView) findViewById(R.id.tv_title);
        tv_back.setOnClickListener(this);
        progress_bar.setIndeterminate(true);//自动在最小到最大值之间来回移动,不明确具体的值
        progress_bar.setVisibility(View.VISIBLE);
    }
    private void initWebView() {
        webview.getSettings().setJavaScriptEnabled(true);//支持javascript。这个属性基本也是必须的,否则网页内容不会自适应手机屏幕
        webview.setWebViewClient(new MyWebViewClient(progress_bar));//在本WebView中显示网页内容。
        webview.addJavascriptInterface(new WebAppinterface(this), JS_INTERFACE);// 注册后可以在JS中调用此接口中定义的方法
        Intent intent = getIntent();
        if (intent != null) {
            //String url = intent.getStringExtra(URL);
            String url = "包青天";
            String title = intent.getStringExtra(TITLE);
            if (!TextUtils.isEmpty(title)) tv_title.setText(title);
            if (!TextUtils.isEmpty(url)) webview.loadUrl(url);
            if (null != url && !"".equals(url)) {//可以防止空指针异常
                if (!url.startsWith("http://") && !url.startsWith("https://")) {
                    if (url.startsWith("www.")) webview.loadUrl("http://" + url); //以"www."开头,添加"http://"前缀
                    else webview.loadUrl("http://www.baidu.com.cn/s?wd=" + url);//使用百度搜索
                } else webview.loadUrl(url);//以"http://"开头,直接加载页面
            } else Toast.makeText(this"请先输入网址", 0).show();
        }
    }
    @Override
    //点击后退按钮不退出Activity,而是让WebView后退一页。也可以通过webview.setOnKeyListener设置
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK && webview.canGoBack()) {
            webview.goBack(); //后退,goForward() 前进  
            return true;
        }
        return super.onKeyDown(keyCode, event);
    }
    @Override
    protected void onDestroy() {
        super.onDestroy();
        if (webview != null) {
            webview.loadUrl("about:blank");
            webview.destroy();
        }
    }
    @Override
    public void onClick(View v) {
        switch (v.getId()) {
        case R.id.tv_back:
            finish();
            break;
        }
    }
}  


示例代码-WebviewClint
public class MyWebViewClient extends WebViewClient {
    private ProgressBar mProgressBar;
    public MyWebViewClient(ProgressBar mProgressBar) {
        super();
        this.mProgressBar = mProgressBar;
    }
    @Override
    //打开网页时不调用系统浏览器, 而是在本WebView中显示
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        view.loadUrl(url);
        return true;
    }
    @Override
    public void onPageStarted(WebView view, String url, Bitmap favicon) {
        mProgressBar.setVisibility(View.VISIBLE);
        super.onPageStarted(view, url, favicon);
    }
    @Override
    public void onPageFinished(WebView view, String url) {
        mProgressBar.setVisibility(View.GONE);
        super.onPageFinished(view, url);
    }
}  


示例代码-JS调用接口
/**
 * 在JS中可以调用此类中的方法
 * @author 白乾涛
 */
public class WebAppinterface {
    private Activity mActivity;
    public WebAppinterface(Activity context) {
        this.mActivity = context;
    }
    @JavascriptInterface
    public void recharge(int vipType) {
        Intent intent = new Intent(mActivity, Activity.class);
        Bundle mBundle = new Bundle();
        mBundle.putInt("item", vipType - 1);
        mActivity.startActivity(intent, mBundle);
    }
}  


示例代码-布局
<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" >
    <RelativeLayout
        android:id="@+id/lk_activity_bar"
        android:layout_width="match_parent"
        android:layout_height="48dp"
        android:background="#ffa726" >
        <TextView
            android:id="@+id/tv_back"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_alignParentLeft="true"
            android:clickable="true"
            android:drawableLeft="@drawable/left_selector"
            android:drawablePadding="5dp"
            android:gravity="center|left"
            android:paddingLeft="15dp"
            android:text="返回"
            android:textColor="#fff"
            android:textSize="14sp" />
        <TextView
            android:id="@+id/tv_title"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            android:text="活动详情"
            android:textColor="#fff"
            android:textSize="18sp" />
    </RelativeLayout>
    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent" >
        <WebView
            android:id="@+id/webview"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
        <ProgressBar
            android:id="@+id/progress_bar"
            style="?android:attr/progressBarStyle"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:indeterminate="true"
            android:indeterminateDrawable="@drawable/progressbar_drawable"
            android:visibility="invisible" />
    </FrameLayout>
</LinearLayout>  




来自为知笔记(Wiz)


附件列表

     

    你可能感兴趣的:(WebView 常用设置【示例】)