MainActivity代码
package likuo.bwie.com.webview;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.text.TextUtils;
import android.view.KeyEvent;
import android.view.View;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.EditText;
import android.widget.ProgressBar;
import android.widget.Toast;
import likuo.bwie.com.webview.R;
/*
webView创建流程:
1. 添加权限:AndroidManifest.xml中必须添加联网权限,否则会出Web page not available错误。
<uses-permission android:name="android.permission.INTERNET" />
2.在xml中添加一个WebView,或者直接用代码new一个WebView。简单来说,我们需要一个WebView的实例。
<WebView
android:id="@+id/webview"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
*/
public class MainActivity extends AppCompatActivity {
private WebView www_wb;
private EditText path_et;
private ProgressBar webView_pb;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//对控件进行一个初始化.
init();
}
/**
* 对控件进行一个初始化.
*/
private void init() {
www_wb = (WebView) findViewById(R.id.www_wb);
path_et = (EditText) findViewById(R.id.path_et);
webView_pb = (ProgressBar) findViewById(R.id.webView_pb);
//使用webView对象,进行的一些初始化设置
webVIewInit();
// 使用webViewSettings对webVIew进行一系列初始化的设置
webViewSettingsInit();
}
/**
* 使用webView对象,进行的一些初始化设置
*/
private void webVIewInit() {
// setWebViewClient 此方法的作用是,当在webView进点击时,不跳转到游览器的设置(也就是不打开新的Activity),而是在本app里进行操作
www_wb.setWebViewClient(new WebViewClient());
// requestFocus 触摸焦点起作用(如果不设置,则在点击网页文本输入框时,不能弹出软键盘及不响应其他的一些事件
www_wb.requestFocus();
// setWebChromeClient 该监听事件是指UI(界面)发送改变时进行各监听. onProgressChanged
www_wb.setWebChromeClient(new WebChromeClient() {
@Override
public void onProgressChanged(WebView view, int newProgress) {
// 首先通过代码让pRogressBar显示出来
webView_pb.setVisibility(View.VISIBLE);
// 其次对progressBar设置加载进度的参数
webView_pb.setProgress(newProgress);
if (newProgress == 100) {
// 加载完毕让进度条消失
webView_pb.setVisibility(View.GONE);
}
super.onProgressChanged(view, newProgress);
}
});
}
/**
* 对网页控件进行一系列的初始化设置
*/
private void webViewSettingsInit() {
// 得到一个webView的设置对象,WebSettings.
WebSettings settings = www_wb.getSettings();
// setJavaScriptEnabled 使webView可以支持Javascript:
settings.setJavaScriptEnabled(true);
// setSupportZoom 使webView允许网页缩放,记住用这方法前,要有让webView支持Javascript的设定.否则会不起作用
settings.setSupportZoom(true);
// setBlockNetworkImage 是webView只加载文字,而不加载图片,为用户省流量.
// settings.setBlockNetworkImage(true);
}
// 通过点击事件,对网址加载,
public void load(View v) {
//进行非空的判断.
String trim = path_et.getText().toString().trim();
if (TextUtils.isEmpty(trim)) {
Toast.makeText(this, "不能输入为空", Toast.LENGTH_SHORT).show();
return;
}
//加载用户输入的网址,loadUrl()
www_wb.loadUrl("http://" + trim);
}
// 通过点击事件,对网页进行前进的操作
public void advance(View v) {
//进行一个状态的判断,看是否可以前进,canGoForward
if (www_wb.canGoForward()) {
//可以前进,就进行前进操作,.goForward();
www_wb.goForward();
} else {
Toast.makeText(this, "不好意思,亲爱的用户,前方无路", Toast.LENGTH_SHORT).show();
}
}
// 通过点击事件,对网页进行后退操作
public void back(View v) {
//进行一个状态的判断,看是否可以后退,canGoBack
if (www_wb.canGoBack()) {
//可以后退就进行后退操作,goBack();
www_wb.goBack();
} else {
Toast.makeText(this, "不好意思,亲爱的用户,已经退无可退了", Toast.LENGTH_SHORT).show();
}
}
// 通过点击事件,对网页进行刷新操作
public void refresh(View v) {
//对当前网页刷新,reload();
www_wb.reload();
}
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
//这里重写返回键
//进行一个状态的判断,看是否可以后退,canGoBack
if (www_wb.canGoBack()) {
//可以后退就进行后退操作,goBack();
www_wb.goBack();
} else {
Toast.makeText(this, "不好意思,亲爱的用户,已经退无可退了", Toast.LENGTH_SHORT).show();
}
return true;
}
return false;
}
}
布局文件
<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">
<!-- 用到了权重知识,progress进度条模式:style="?android:attr/progressBarStyleHorizontal" -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<EditText
android:id="@+id/path_et"
android:layout_width="match_parent"
android:layout_weight="1"
android:layout_height="wrap_content"
android:singleLine="true"
android:hint="请用户输入网址,直接从www开始即可"
/>
<Button
android:onClick="load"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="加载网页"/>
</LinearLayout>
<ProgressBar
android:id="@+id/webView_pb"
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="?android:attr/progressBarStyleHorizontal"
android:max="100"
android:visibility="gone"
/>
<WebView
android:id="@+id/www_wb"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1">
</WebView>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<Button
android:onClick="refresh"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:text="刷新"
/>
<Button
android:onClick="advance"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:text="前进"
/>
<Button
android:onClick="back"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:text="后退"
/>
</LinearLayout>
</LinearLayout>