Android中WebView的使用方法

功能:使用WebView加载网页,在等待网页加载时一个ProgressBar旋转,一个按钮可以来选择改变字体的大小。

布局文件

<?xml version="1.0" encoding="utf-8"?>
<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"
    tools:context="com.example.administrator.smartbj.activity.WebNewsActivity">


    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="80dp"
        android:background="@drawable/title_red_bg">


        <ImageButton
            android:id="@+id/ib_back"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerVertical="true"
            android:layout_marginLeft="5dp"
            android:background="@android:color/transparent"
            android:padding="5dp"
            android:src="@drawable/back" />

        <ImageButton
            android:id="@+id/ib_change_size"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerVertical="true"
            android:layout_marginLeft="5dp"
            android:layout_toLeftOf="@+id/ib_share"
            android:background="@android:color/transparent"
            android:padding="5dp"
            android:src="@drawable/icon_textsize" />

    </RelativeLayout>

    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <WebView
            android:id="@+id/wv_web"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />

        <ProgressBar
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/progressBar"
            android:layout_gravity="center" />


    </FrameLayout>


</LinearLayout>

Activity,具体看注释

package com.example.administrator.activity;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.SharedPreferences;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.view.View;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.ImageButton;
import android.widget.ProgressBar;

import com.example.administrator.R;

public class WebActivity extends Activity {

    private WebView wvWeb;
    private ImageButton ibBack;
    private ImageButton ibChangeSize;
    private ImageButton ibshare;
    private ProgressBar progressBar;
    private SharedPreferences mPref;
    private int mCurrentItem;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_web_news);

        wvWeb = (WebView) findViewById(R.id.wv_web);
        ibBack = (ImageButton) findViewById(R.id.ib_back);
        ibChangeSize = (ImageButton) findViewById(R.id.ib_change_size);
        ibshare = (ImageButton) findViewById(R.id.ib_share);
        progressBar = (ProgressBar) findViewById(R.id.progressBar);

        String url = getIntent().getStringExtra("webUrl");//从另一个Activity传过来的URL

        //用来保存字体的大小
        mPref = getSharedPreferences("config", MODE_PRIVATE);
        mCurrentItem = mPref.getInt("text_size", 2);

        changeTextSize(mCurrentItem);

        WebSettings settings = wvWeb.getSettings();

//        settings.setJavaScriptEnabled(true);//支持js,使用了这个发现有js虽然完成了网页的加载,但是进度不会到100,也就是不能走到网页加载结束的方法

        settings.setUseWideViewPort(true);//可以双击放大缩小
        wvWeb.setWebViewClient(new WebViewClient() {
            //开始加载
            @Override
            public void onPageStarted(WebView view, String url, Bitmap favicon) {
                super.onPageStarted(view, url, favicon);

                progressBar.setVisibility(View.VISIBLE);

 //               System.out.println("网页加载开始...");
            }

            //网页加载结束
            @Override
            public void onPageFinished(WebView view, String url) {
                super.onPageFinished(view, url);
//                System.out.println("网页加载结束...");

                progressBar.setVisibility(View.GONE);
            }

            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                view.loadUrl(url); //表示不跳转 在WebView中加载
                return super.shouldOverrideUrlLoading(view, url);
            }
        });

        wvWeb.setWebChromeClient(new WebChromeClient() {
            /**
             * 获取网页标题
             * @param view
             * @param title
             */
            @Override
            public void onReceivedTitle(WebView view, String title) {
                super.onReceivedTitle(view, title);
            }

            /**
             * 进度发送变化
             * @param view
             * @param newProgress
             */
            @Override
            public void onProgressChanged(WebView view, int newProgress) {
                super.onProgressChanged(view, newProgress);
                //在这里可以加载进度条来显示网页加载的进度
                System.out.println("网页加载进度"+newProgress);

            }
        });

        wvWeb.loadUrl(url);//加载网页

        initEvent();


    }

    private void initEvent() {


        ibBack.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                finish();//后退功能的实现
            }
        });

        ibChangeSize.setOnClickListener(new View.OnClickListener() {

            private int mCurrentChosedItem;
            @Override
            public void onClick(View v) {
                //弹出改变字体大小的单选框
                String[] items = new String[]{"超大号字体","大号字体","正常字体","小号字体","超小号字体"};
                AlertDialog.Builder dialog = new AlertDialog.Builder(WebNewsActivity.this);
                dialog.setSingleChoiceItems(items, mCurrentItem, new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        System.out.println("选中:" + which);
                        mCurrentChosedItem = which;
                    }
                });

                dialog.setPositiveButton("确定", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
//                        System.out.println("确定后选中的item:" + which);//该值一直为-1,不能使用
                        mCurrentItem = mCurrentChosedItem;
                        changeTextSize(mCurrentItem);

                        //记录最后的item
                        mPref.edit().putInt("text_size", mCurrentItem).commit();
                    }
                });

                dialog.setNegativeButton("取消", null);
                dialog.show();
            }



        });
    }

    /**
     * 改变字体大小
     * @param which
     */
    private void changeTextSize(int which) {
        WebSettings settings = wvWeb.getSettings();

        switch (which){
            case 0:
                settings.setTextSize(WebSettings.TextSize.LARGEST);
                break;
            case 1:
                settings.setTextSize(WebSettings.TextSize.LARGER);
                break;
            case 2:
                settings.setTextSize(WebSettings.TextSize.NORMAL);
                break;
            case 3:
                settings.setTextSize(WebSettings.TextSize.SMALLER);
                break;
            case 4:
                settings.setTextSize(WebSettings.TextSize.SMALLEST);
                break;
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值