当我们的程序需要某些特殊要求时,比如:需要在程序内加载并展示网页,但是又不希望调用浏览器时,我们应该怎么实现呢?我们都知道浏览网页都是通过浏览器,在地址栏中输入需要浏览的网页网址,或者在搜索栏中输入想要浏览的信息关键词进行搜索浏览。
什么是WebView?如何实现WebView?
WebView的实现很简单,在需要显示网页的Activity布局文件中添加一个"WebView"控件,再设置其一些基本属性,代码如下:
属性也很简单,都是一些常用的属性:
- android:id:给WebView添加唯一标识符,方便找到并进项操作
- android:layout_width:指定WebView的宽度
- android:layout_height:指定WebView的高度
添加好"WebView"控件并指定好其基本属性后,在Activity的java文件中对WebView进行配置,代码如下:
import com.example.myandroidui.R;
public class WebView_Activity extends AppCompatActivity {
private WebView mWebView;
@SuppressLint("SetJavascriptEnabled")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_web_view_);
mWebView = findViewById(R.id.webView);
mWebView.getSettings().setJavascriptEnabled(true);
mWebView.loadUrl("https://www.sogou.com/");
mWebView.setWebViewClient(new WebViewClient());
}
}
基本代码部分就不进行详细解释了,就是简单的声明并找到WebView,下面我们来一一讲解配置WebView的相关代码:
- getSettings().setJavascriptEnabled():使用该方法让WebView支持Javascript脚本,因为网页大多都是使用Javascript编写的。
- loadUrl():在这个方法中传入需要展示的网页URL,也就是网址。
- setWebViewClient( ):添加这个方法后,在WebView中打开网页时,系统会默认使用WebView进行网页的加载展示,否则会调用浏览器加载网页进行展示。
因为展示网页需要使用手机的访问网络功能,所以我们还需要在"AndroidManifest.xml"文件中添加网络权限,代码如下:
因为Android对数据传输的安全和保密机制,所以我们想要让应用程序使用明文网络流量,就需要在application头标签中加入下面代码(我们这里只是单纯的实现演示一个简单的WebView,所以使用明文流量,在现实程序开发中,数据安全是最重要的):
android:usesCleartextTraffic="true"
以上就实现了一个WebView,代码简简单单,我们来运行程序,看一下其是否能不调用浏览器进行网页的加载展示,如下图:通过运行结果可以看到,通过WebView,我们确实实现了在程序内不调用浏览器,进行网页的展示,并且可以在WebView中进行搜索浏览,但是有一个问题不知道大家有没有留意到,当我们点击"Back"键时,Activity直接关闭了,而不是返回上一个页面,这个现象会给用户带来很不好的使用体验,可以设想:当你在浏览器看完小视频时,想返回上一个页面,系统直接给你退出了程序,相信你可能会忍不住口吐芬芳。那该怎么去解决这个问题呢?Android 提供了一个onKeyDown( )方法,我们来重写该方法,代码如下:
@Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) { // 如果按下的按键是返回键并且webView可以返回,就执行webView返回 if (keyCode == KeyEvent.KEYCODE_BACK && mWebView.canGoBack()) { mWebView.goBack(); return true; } return super.onKeyDown(keyCode, event);}
在上面代码中可以看到,我们在onKeDown( )方法中传入了一个keyCode类型的参数,这个参数就是指我们按下了哪个按钮,在方法中加入if语句进行判断,如果keyCode是返回键,并且WebView能够返回,就执行WebView中的返回。KeyEvent.KEYCODE_BACK就是指返回事件的意思。简而言之就是判断按下的按键如果为返回键,并且网页能返回到上一个页面,就回到上一个页面,而不会退出Activity,现在再来运行一下程序,看一下是否能够在WebView中使用"Back"键实现页面返回功能:通过运行结果我们能发现,在我们在首页打开一个页面,在打开的页面中再打开第三个页面,此时,按下"Back"键,并没有退出Activity,而是返回到了上一个页面,再按下"Back"键,就返回到了首页,在主页中按下"Back"键,退出Activity,这是因为在首页按下"Back"键,此时的WebView没有上一个页面可返回了,所以会结束掉程序。ok,以上就是一个简单的WebView的实现,下篇文章我们来讲解WebView常用的子类和其子类中的常用方法,这些方法能让我们程序中编写的WebView功能更加完善。了解更多的Android学习知识信息,请关注我们的微信公众号:秉空课堂