最终效果
先创建一个WebView控件,其他的就是通过线性布局在上方加入网址输入框和两个按钮
<WebView
android:id="@+id/act_webview_wv"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
初始化控件,然后自定义几个网址,做演示
private WebView wv;
private EditText webEt;
private Button webBtn,gotoWebBtn;
private String urlStr;
private ListView urlLv;
private ArrayAdapter<String> adapter;
private String[] itemWeb = new String[]{"https://www.baidu.com"
,"https://www.google.com"
,"https://my.oschina.net/"};
wv = (WebView) findViewById(R.id.act_webview_wv);
webEt = (EditText) findViewById(R.id.act_webview_input_et);
webBtn = (Button) findViewById(R.id.act_webview_url_btn);
gotoWebBtn = (Button) findViewById(R.id.act_webview_goto_btn);
urlLv = (ListView) findViewById(R.id.act_webview_url_list_lv);
webEt.setText("");
urlLv.setVisibility(View.INVISIBLE);
申请网络权限
<uses-permission android:name="android.permission.INTERNET" />
设置在当前应用内打开网页,如果不设置的话,会自动调用系统浏览器
//设置在当前应用内浏览网页
wv.setWebViewClient(new WebViewClient(){
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
});
设置浏览器的支持功能
/* 设置支持Js,必须设置的,不然网页基本上不能看 */
wv.getSettings().setJavaScriptEnabled(true);
/* 设置缓存模式,我这里使用的默认,不做多讲解 */
wv.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT);
/* 设置为true表示支持使用js打开新的窗口 */
wv.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
/* 大部分网页需要自己保存一些数据,这个时候就的设置下面这个属性 */
wv.getSettings().setDomStorageEnabled(true);
/* 设置为使用webview推荐的窗口 */
wv.getSettings().setUseWideViewPort(true);
/* 设置网页自适应屏幕大小 ---这个属性应该是跟上面一个属性一起用 */
wv.getSettings().setLoadWithOverviewMode(true);
/* HTML5的地理位置服务,设置为true,启用地理定位 */
wv.getSettings().setGeolocationEnabled(true);
/* 设置是否允许webview使用缩放的功能,我这里设为false,不允许 */
wv.getSettings().setBuiltInZoomControls(false);
/* 提高网页渲染的优先级 */
wv.getSettings().setRenderPriority(WebSettings.RenderPriority.HIGH);
/* 设置显示水平滚动条,就是网页右边的滚动条.我这里设置的不显示 */
wv.setHorizontalScrollBarEnabled(false);
/* 指定垂直滚动条是否有叠加样式 */
wv.setVerticalScrollbarOverlay(true);
/* 设置滚动条的样式 */
wv.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);
/* 这个不用说了,重写WebChromeClient监听网页加载的进度,从而实现进度条 */
wv.setWebChromeClient(new WebChromeClient());
设置适配器
if (adapter == null) {
adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, itemWeb);
}else {
adapter.notifyDataSetChanged();
}
urlLv.setAdapter(adapter);
点击网址按钮显示列表,当点击列表中的网址后,自动将网址填入编辑框
webBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
urlLv.setVisibility(View.VISIBLE);
urlLv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id)
{
String urlText = itemWeb[position];
urlStr = urlText;
urlLv.setVisibility(View.INVISIBLE);
webEt.setText(urlText);
}
});
}
});
点击前往按钮,打开编辑框内对应的网址
gotoWebBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String urlText = webEt.getText().toString().trim();
if (!TextUtils.isEmpty(urlText)) {
urlStr = urlText;
wv.loadUrl(urlStr);
setBrowser();
}else {
Toast.makeText(WebViewActivity.this, "请先输入网址", Toast.LENGTH_SHORT).show();
}
}
});