功能:使用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;
}
}
}