webview包括前进、后退、刷新以及水平进度条

规则:

1、wap页新增工具栏,包括后退,前进和刷新按钮

2、点击后退,返回到上一页,点击前进按钮,进入之前打开过的页面,如没有打开过的界面,前进和后退按钮不可选。

3、点击刷新,刷新当前页面

4、进度条显示,显示当前加载页面的进度,可参考微信wap页面,当加载完成后,进度条完成且消失

5、调用wap页面时候,控制是否显示该工具条


activity_webview.xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_above="@+id/toolbarline"
        android:background="#FFFFFF" >

        <WebView
            android:id="@+id/webview"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:overScrollMode="never" />

        <ProgressBar
            android:id="@+id/progressbar"
            style="@style/progressbar_style"
            android:layout_width="match_parent"
            android:layout_height="2dp"
            android:layout_gravity="top"
            android:max="100"
            android:progress="0" />
    </FrameLayout>

    <View
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:id="@+id/toolbarline"
        android:layout_above="@+id/webviewBottom"
        android:background="#dbdbdb" />

    <RelativeLayout
        android:id="@+id/webviewBottom"
        android:layout_width="match_parent"
        android:layout_height="48dp"
        android:layout_alignParentBottom="true"
        android:background="#eeeff1" >

        <ImageButton
            android:id="@+id/back"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerVertical="true"
            android:layout_marginLeft="32dp"
            android:background="@null"
            android:padding="10dp"
            android:src="@drawable/back_normal" />

        <ImageButton
            android:id="@+id/forward"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerVertical="true"
            android:layout_marginLeft="70dp"
            android:layout_toRightOf="@+id/back"
            android:background="@null"
            android:padding="10dp"
            android:src="@drawable/forward_normal" />

        <ImageButton
            android:id="@+id/refresh"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:layout_centerVertical="true"
            android:layout_marginRight="32dp"
            android:background="@null"
            android:padding="10dp"
            android:src="@drawable/refresh" />
    </RelativeLayout>

</RelativeLayout>


WebviewActivity:

package com.webview.ui;


import android.app.Activity;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
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 android.widget.RelativeLayout;


public class WebviewActivity extends Activity implements OnClickListener {


<span style="white-space:pre">	</span>/** 后退 */
<span style="white-space:pre">	</span>private ImageButton back;
<span style="white-space:pre">	</span>/** 前进 */
<span style="white-space:pre">	</span>private ImageButton forward;
<span style="white-space:pre">	</span>/** 刷新 */
<span style="white-space:pre">	</span>private ImageButton refresh;
<span style="white-space:pre">	</span>/** 进度条 */
<span style="white-space:pre">	</span>private ProgressBar progressBar;
<span style="white-space:pre">	</span>/** 工具栏顶部横线 */
<span style="white-space:pre">	</span>private View toolbarline;
<span style="white-space:pre">	</span>/** 按钮标志位,代表按下哪个按钮 */
<span style="white-space:pre">	</span>private String btFlag = null;
<span style="white-space:pre">	</span>/** 是否点击刷新按钮 */
<span style="white-space:pre">	</span>private boolean isRefersh = false;
<span style="white-space:pre">	</span>private RelativeLayout webviewBottom;
<span style="white-space:pre">	</span>/** 网页 */
<span style="white-space:pre">	</span>private WebView webView;
<span style="white-space:pre">	</span>private WebSettings settings;


<span style="white-space:pre">	</span>@Override
<span style="white-space:pre">	</span>protected void onCreate(Bundle savedInstanceState) {
<span style="white-space:pre">		</span>super.onCreate(savedInstanceState);
<span style="white-space:pre">		</span>setContentView(R.layout.activity_webview);
<span style="white-space:pre">		</span>findById();
<span style="white-space:pre">		</span>setListener();
<span style="white-space:pre">		</span>initView();
<span style="white-space:pre">	</span>}


<span style="white-space:pre">	</span>/**
<span style="white-space:pre">	</span> * 初始化界面
<span style="white-space:pre">	</span> */
<span style="white-space:pre">	</span>private void initView() {
<span style="white-space:pre">		</span>webView.loadUrl("http://www.baidu.com");
<span style="white-space:pre">	</span>}


<span style="white-space:pre">	</span>/**
<span style="white-space:pre">	</span> * 设置监听
<span style="white-space:pre">	</span> */
<span style="white-space:pre">	</span>private void setListener() {
<span style="white-space:pre">		</span>back.setOnClickListener(this);
<span style="white-space:pre">		</span>forward.setOnClickListener(this);
<span style="white-space:pre">		</span>refresh.setOnClickListener(this);
<span style="white-space:pre">	</span>}


<span style="white-space:pre">	</span>/**
<span style="white-space:pre">	</span> * 初始化ui
<span style="white-space:pre">	</span> */
<span style="white-space:pre">	</span>private void findById() {
<span style="white-space:pre">		</span>back = (ImageButton) findViewById(R.id.back);
<span style="white-space:pre">		</span>forward = (ImageButton) findViewById(R.id.forward);
<span style="white-space:pre">		</span>refresh = (ImageButton) findViewById(R.id.refresh);
<span style="white-space:pre">		</span>toolbarline = findViewById(R.id.toolbarline);
<span style="white-space:pre">		</span>webviewBottom = (RelativeLayout) findViewById(R.id.webviewBottom);
<span style="white-space:pre">		</span>progressBar = (ProgressBar) findViewById(R.id.progressbar);
<span style="white-space:pre">		</span>webView = (WebView) findViewById(R.id.webview);
<span style="white-space:pre">		</span>settings = webView.getSettings();
<span style="white-space:pre">		</span>// 设置WebView属性,能够执行Javascript脚本
<span style="white-space:pre">		</span>settings.setJavaScriptEnabled(true);
<span style="white-space:pre">		</span>// js与android调用接口
<span style="white-space:pre">		</span>webView.addJavascriptInterface(new MyJavascriptInterface(), "android");
<span style="white-space:pre">		</span>// 设置Web视图
<span style="white-space:pre">		</span>webView.setWebViewClient(new MyWebViewClient());
<span style="white-space:pre">		</span>// 处理Javascript的对话框、网站图标、网站title、加载进度等
<span style="white-space:pre">		</span>webView.setWebChromeClient(new MyWebChromeClient());
<span style="white-space:pre">	</span>}


<span style="white-space:pre">	</span>class MyJavascriptInterface {
<span style="white-space:pre">		</span>public MyJavascriptInterface() {


<span style="white-space:pre">		</span>}


<span style="white-space:pre">		</span>/**
<span style="white-space:pre">		</span> * 工具栏显示
<span style="white-space:pre">		</span> */
<span style="white-space:pre">		</span>public void setVisibility() {
<span style="white-space:pre">			</span>toolbarline.setVisibility(View.VISIBLE);
<span style="white-space:pre">			</span>webviewBottom.setVisibility(View.VISIBLE);
<span style="white-space:pre">		</span>}


<span style="white-space:pre">		</span>/**
<span style="white-space:pre">		</span> * 工具栏消失
<span style="white-space:pre">		</span> */
<span style="white-space:pre">		</span>public void setGone() {
<span style="white-space:pre">			</span>toolbarline.setVisibility(View.GONE);
<span style="white-space:pre">			</span>webviewBottom.setVisibility(View.GONE);
<span style="white-space:pre">		</span>}
<span style="white-space:pre">	</span>}


<span style="white-space:pre">	</span>class MyWebChromeClient extends WebChromeClient {


<span style="white-space:pre">		</span>@Override
<span style="white-space:pre">		</span>public void onReceivedTitle(WebView view, String title) {
<span style="white-space:pre">			</span>super.onReceivedTitle(view, title);
<span style="white-space:pre">			</span>setTitle(title);
<span style="white-space:pre">		</span>}


<span style="white-space:pre">		</span>@Override
<span style="white-space:pre">		</span>public void onProgressChanged(WebView view, int newProgress) {
<span style="white-space:pre">			</span>if (newProgress == 100) {
<span style="white-space:pre">				</span>progressBar.setProgress(newProgress);
<span style="white-space:pre">				</span>progressBar.setVisibility(View.GONE);
<span style="white-space:pre">				</span>isRefersh = false;
<span style="white-space:pre">				</span>refresh.setImageDrawable(getResources().getDrawable(
<span style="white-space:pre">						</span>R.drawable.refresh));
<span style="white-space:pre">			</span>} else {
<span style="white-space:pre">				</span>if (progressBar.getVisibility() == View.GONE)
<span style="white-space:pre">					</span>progressBar.setVisibility(View.VISIBLE);
<span style="white-space:pre">				</span>progressBar.setProgress(newProgress);
<span style="white-space:pre">			</span>}


<span style="white-space:pre">			</span>super.onProgressChanged(view, newProgress);
<span style="white-space:pre">		</span>}
<span style="white-space:pre">	</span>}


<span style="white-space:pre">	</span>class MyWebViewClient extends WebViewClient {
<span style="white-space:pre">		</span>@Override
<span style="white-space:pre">		</span>public void onPageStarted(WebView view, String url, Bitmap favicon) {
<span style="white-space:pre">			</span>super.onPageStarted(view, url, favicon);
<span style="white-space:pre">			</span>if ("refresh".equals(btFlag)) {// 判断是否是刷新按钮
<span style="white-space:pre">				</span>if (isRefersh) {
<span style="white-space:pre">					</span>refresh.setImageDrawable(getResources().getDrawable(
<span style="white-space:pre">							</span>R.drawable.stop));
<span style="white-space:pre">				</span>}
<span style="white-space:pre">			</span>}


<span style="white-space:pre">		</span>}


<span style="white-space:pre">		</span>@Override
<span style="white-space:pre">		</span>public void onPageFinished(WebView view, String url) {
<span style="white-space:pre">			</span>super.onPageFinished(view, url);
<span style="white-space:pre">			</span>if (webView.canGoBack()) {// 如果能后退,则更新图像状态
<span style="white-space:pre">				</span>back.setImageDrawable(getResources().getDrawable(
<span style="white-space:pre">						</span>R.drawable.back_selected));
<span style="white-space:pre">			</span>} else {
<span style="white-space:pre">				</span>back.setImageDrawable(getResources().getDrawable(
<span style="white-space:pre">						</span>R.drawable.back_normal));
<span style="white-space:pre">			</span>}
<span style="white-space:pre">			</span>if (webView.canGoForward()) {// 如果能前期,则更新图像状态
<span style="white-space:pre">				</span>forward.setImageDrawable(getResources().getDrawable(
<span style="white-space:pre">						</span>R.drawable.forward_selected));
<span style="white-space:pre">			</span>} else {
<span style="white-space:pre">				</span>forward.setImageDrawable(getResources().getDrawable(
<span style="white-space:pre">						</span>R.drawable.forward_normal));
<span style="white-space:pre">			</span>}
<span style="white-space:pre">		</span>}


<span style="white-space:pre">		</span>@Override
<span style="white-space:pre">		</span>public boolean shouldOverrideUrlLoading(WebView view, String url) {
<span style="white-space:pre">			</span>view.loadUrl(url);
<span style="white-space:pre">			</span>return true;
<span style="white-space:pre">		</span>}
<span style="white-space:pre">	</span>}


<span style="white-space:pre">	</span>@Override
<span style="white-space:pre">	</span>public boolean onCreateOptionsMenu(Menu menu) {
<span style="white-space:pre">		</span>getMenuInflater().inflate(R.menu.main, menu);
<span style="white-space:pre">		</span>return true;
<span style="white-space:pre">	</span>}


<span style="white-space:pre">	</span>@Override
<span style="white-space:pre">	</span>public void onClick(View v) {
<span style="white-space:pre">		</span>switch (v.getId()) {
<span style="white-space:pre">		</span>case R.id.back:// 后退
<span style="white-space:pre">			</span>btFlag = "back";// 代表按下的是后退按钮
<span style="white-space:pre">			</span>if (webView.canGoBack()) {// 如果能返回
<span style="white-space:pre">				</span>webView.goBack();
<span style="white-space:pre">			</span>}
<span style="white-space:pre">			</span>break;
<span style="white-space:pre">		</span>case R.id.forward:// 前进
<span style="white-space:pre">			</span>btFlag = "forward";// 代表按下的是前进按钮
<span style="white-space:pre">			</span>if (webView.canGoForward()) {// 如果能前进
<span style="white-space:pre">				</span>webView.goForward();
<span style="white-space:pre">			</span>}
<span style="white-space:pre">			</span>break;
<span style="white-space:pre">		</span>case R.id.refresh:// 刷新
<span style="white-space:pre">			</span>btFlag = "refresh";// 代表按下的是刷新按钮
<span style="white-space:pre">			</span>if (isRefersh) {// 当正在刷新中,再次点击刷新按钮时,刷新结束
<span style="white-space:pre">				</span>isRefersh = false;
<span style="white-space:pre">				</span>// webview停止加载
<span style="white-space:pre">				</span>webView.stopLoading();
<span style="white-space:pre">				</span>refresh.setImageDrawable(getResources().getDrawable(
<span style="white-space:pre">						</span>R.drawable.refresh));
<span style="white-space:pre">			</span>} else {
<span style="white-space:pre">				</span>isRefersh = true;
<span style="white-space:pre">				</span>webView.reload();
<span style="white-space:pre">			</span>}
<span style="white-space:pre">			</span>break;


<span style="white-space:pre">		</span>default:
<span style="white-space:pre">			</span>break;
<span style="white-space:pre">		</span>}
<span style="white-space:pre">	</span>}


<span style="white-space:pre">	</span>@Override
<span style="white-space:pre">	</span>public boolean onKeyDown(int keyCode, KeyEvent event) {
<span style="white-space:pre">		</span>if (keyCode == KeyEvent.KEYCODE_BACK && webView.canGoBack()) {
<span style="white-space:pre">			</span>btFlag = "back";// 代表按下的是后退按钮
<span style="white-space:pre">			</span>webView.goBack();
<span style="white-space:pre">			</span>return true;
<span style="white-space:pre">		</span>}
<span style="white-space:pre">		</span>return super.onKeyDown(keyCode, event);
<span style="white-space:pre">	</span>}


<span style="white-space:pre">	</span>@Override
<span style="white-space:pre">	</span>protected void onDestroy() {
<span style="white-space:pre">		</span>super.onDestroy();
<span style="white-space:pre">		</span>webView.clearHistory();
<span style="white-space:pre">	</span>}
}

自定义progressbar.xml

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >

    <item android:id="@android:id/background">
        <shape>
            <corners android:radius="5dip" />

            <gradient
                android:angle="270"
                android:centerY="0.75"
                android:endColor="#F5F5F5"
                android:startColor="#BEBEBE" />
        </shape>
    </item>
    <item android:id="@android:id/secondaryProgress">
        <clip>
            <shape>
                <corners android:radius="0dip" />

                <gradient
                    android:angle="270"
                    android:centerY="0.75"
                    android:endColor="#165CBC"
                    android:startColor="#85B0E9" />
            </shape>
        </clip>
    </item>
    <item android:id="@android:id/progress">
        <clip>
            <shape>
                <corners android:radius="5dip" />

                <gradient
                    android:angle="270"
                    android:centerY="0.75"
                    android:endColor="#6fb40d"
                    android:startColor="#9cdd3f" />
            </shape>
        </clip>
    </item>

</layer-list>

自定义水平进度条样式 progressbar_style
<style name="progressbar_style" parent="@android:style/Widget.ProgressBar.Horizontal">
        <item name="android:maxHeight">50dip</item>
        <item name="android:minHeight">8dip</item>
        <item name="android:indeterminateOnly">false</item>
        <item name="android:indeterminateDrawable">@android:drawable/progress_indeterminate_horizontal</item>
        <item name="android:progressDrawable">@drawable/progressbar</item>
    </style>

项目清单文件:

<activity
            android:name="com.webview.ui.WebviewActivity"
            android:windowSoftInputMode="stateHidden|adjustPan" >
        </activity>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值