您的位置:首页 > 移动开发

18、登录问题页面:WebViewActivity

2016-01-28 19:19 405 查看
在登录页面的右下角有一个“登录遇到问题?”的按钮,点击后显示登录问题页面:





这是加载了一个网页,WebViewActivity作为一个通用的网页显示页面,做的蛮不错,以后可以直接拿来用:

package com.example.wechat.view;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.graphics.Bitmap;
import android.os.Build;
import android.os.Bundle;
import android.os.CountDownTimer;
import android.text.TextUtils;
import android.view.View;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.TextView;

import com.example.wechat.R;
import com.example.wechat.common.Constants;
import com.example.wechat.common.Utils;

import java.lang.reflect.InvocationTargetException;

public class WebViewActivityextends BaseActivity {
private ImageView img_back;
private TextView txt_title;
private WebView mWebView;
private ProgressBar progressbar;
private String strurl = "";
private MyTimer mTimer;
private int progress = 0;

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

@Override
protected void onResume() {
super.onResume();
try {
mWebView.getClass().getMethod("onResume").invoke(mWebView, (Object[]) null);
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
}

}

@Override
public void onPause() {
super.onPause();
try {
mWebView.getClass().getMethod("onPause").invoke(mWebView, (Object[]) null);
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
}
}

@Override
protected void initControl() {
txt_title = (TextView) findViewById(R.id.txt_title);
img_back = (ImageView) findViewById(R.id.img_back);
img_back.setVisibility(View.VISIBLE);
mWebView = (WebView) findViewById(R.id.mwebview);
progressbar = (ProgressBar) findViewById(R.id.progressbar);
}

@SuppressLint("SetJavaScriptEnabled")
@Override
protected void initView() {
Bundle bundle = getIntent().getExtras();
if (bundle != null && bundle.getString(Constants.URL) != null) {
strurl = "";
strurl = bundle.getString(Constants.URL);
}
if (bundle != null && bundle.getString(Constants.Title) != null) {
txt_title.setText(bundle.getString(Constants.Title));
}
if (TextUtils.isEmpty(strurl) == false) {
mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.setWebViewClient(new WeiboWebViewClient());
mWebView.setWebChromeClient(new WebChromeClient());

if (Build.VERSION.SDK_INT >= 19) {
mWebView.getSettings().setLoadsImagesAutomatically(true);
} else {
mWebView.getSettings().setLoadsImagesAutomatically(false);
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
mWebView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
}

mWebView.loadUrl(strurl);
}
}

private class WeiboWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
return super.shouldOverrideUrlLoading(view, url);
}

@Override
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
super.onReceivedError(view, errorCode, description, failingUrl);
mWebView.loadDataWithBaseURL(null, "", "text/html", "utf-8", null);
// TODO 显示错误404
}

@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
if (mTimer == null) {
mTimer = new MyTimer(15000, 50);
}
mTimer.start();
progressbar.setVisibility(View.VISIBLE);
}

@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
if (!mWebView.getSettings().getLoadsImagesAutomatically()) {
mWebView.getSettings().setLoadsImagesAutomatically(true);
}
mTimer.cancel();
progress = 0;
progressbar.setProgress(100);
progressbar.setVisibility(View.GONE);
}
}

@Override
protected void initData() {
}

/* 定义一个倒计时的内部类 */
private class MyTimer extends CountDownTimer {
public MyTimer(long millisInFuture, long countDownInterval) {
super(millisInFuture, countDownInterval);
}

@Override
public void onFinish() {
progress = 100;
progressbar.setVisibility(View.GONE);
}

@Override
public void onTick(long millisUntilFinished) {
if (progress == 100) {
progressbar.setVisibility(View.GONE);
} else {
progressbar.setProgress(progress++);
}
}
}

@Override
protected void setListener() {
img_back.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View v) {
if (mWebView.canGoBack()) {
mWebView.goBack();
} else {
Utils.finish(WebViewActivity.this);
}
}
});
}

}

具体调用方法:

Utils.start_Activity(LoginActivity.this, WebViewActivity.class,
new BasicNameValuePair(Constants.Title, "帮助"),
new BasicNameValuePair(Constants.URL, "http://weixin.qq.com/"));


也就是设置一个标题和url地址即可。

/**
* 打开Activity
*
* @param activity
* @param cls
* @param name
*/
public static void start_Activity(Activity activity, Class<?> cls, BasicNameValuePair... name) {
Intent intent = new Intent();
intent.setClass(activity, cls);
if (name != null)
for (int i = 0; i < name.length; i++) {
intent.putExtra(name[i].getName(), name[i].getValue());
}
activity.startActivity(intent);
activity.overridePendingTransition(R.anim.push_left_in, R.anim.push_left_out);
}

/**
* 关闭 Activity
*
* @param activity
*/
public static void finish(Activity activity) {
activity.finish();
activity.overridePendingTransition(R.anim.push_right_in, R.anim.push_right_out);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: