Android中WebView的使用与后退键处理详细讲解

 更新时间:2024年04月03日 09:25:51   作者:程序员不想YY啊  
博主自从开始写安卓以来,一直饱受WebView的摧残,好在网上一大堆的大神给出了他们成长路上遇到的坑以及一些解决办法,这篇文章主要给大家介绍了关于Android中WebView的使用与后退键处理的相关资料,需要的朋友可以参考下

前言

WebView是Android提供的一个内置浏览器控件,它允许应用在其内显示网页内容或执行JavaScript脚本。由于WebView基于Chromium项目,因此它通常拥有和Google Chrome浏览器相似的渲染引擎和性能。

WebView的使用

  • ✨权限:在使用WebView之前,你需要在AndroidManifest.xml文件中添加网络权限:

    <uses-permission android:name="android.permission.INTERNET" />
    
  • ✨布局文件中的WebView:你需要在布局文件中加入WebView组件:

    <WebView
        android:id="@+id/webview"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
    
  • ✨代码中初始化WebView:在Activity或Fragment的onCreate方法中通过ID获得WebView实例,并通过loadUrl加载一个网页:

    WebView myWebView = (WebView) findViewById(R.id.webview);
    myWebView.loadUrl("http://www.example.com");
    
  • ✨WebViewClient和WebChromeClient

    • 💅WebViewClient:可以处理各种通知和请求事件,如页面加载开始和结束。
    • 💅WebChromeClient:可以处理JavaScript对话框、图标、标题和加载进度。
    myWebView.setWebViewClient(new WebViewClient());
    myWebView.setWebChromeClient(new WebChromeClient());
    
  • ✨启用JavaScript:很多网页需要JavaScript支持,可以在WebView的设置中启用:

    WebSettings webSettings = myWebView.getSettings();
    webSettings.setJavaScriptEnabled(true);
    
  • ✨处理特定链接的点击:你可以拦截并处理点击链接的逻辑:

    myWebView.setWebViewClient(new WebViewClient() {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
            // 在这里处理点击链接后的逻辑
            return false; // 返回false意味着WebView会处理链接,如果返回true则不处理
        }
    });
    

WebView中的后退键处理

要处理Android设备的后退键以便用户可以后退到之前的网页,你需要重写Activity的onBackPressed方法:

@Override
public void onBackPressed() {
    if (myWebView != null && myWebView.canGoBack()) {
        myWebView.goBack(); // 如果WebView可以后退,则后退WebView
    } else {
        super.onBackPressed(); // 如果WebView不能后退,则执行默认的后退键逻辑
    }
}

这样,当用户按下后退键时,如果WebView可以后退到上一个页面,就会执行后退操作;如果不能后退,就会执行Activity的默认后退行为,比如结束当前Activity。

请根据你实际的开发环境和需求,对这些示例代码进行相应的调整。

附:WebView与JavaScript相互调用问题

如果是debug没有配置混淆时,调用时没问题的,但是当设置混淆后发现无法正常调用了。

解决方案:

在proguard-rules.pro中添加混淆。

-keepattributes *Annotation*  
-keepattributes *JavascriptInterface*
-keep public class xx.xxx.ShowLogJavaScriptInterface{
   public <methods>;
}

其中xx.xxx..ShowLogJavaScriptInterface 是不需要混淆的类

总结

到此这篇关于Android中WebView的使用与后退键处理的文章就介绍到这了,更多相关WebView使用与后退键处理内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 微信第三方登录Android实现代码

    微信第三方登录Android实现代码

    本篇文章主要介绍了微信第三方登录Android实现代码,可以通过微信登陆到第三方应用,有需要的可以了解一下。
    2016-11-11
  • Kotlin协程launch启动流程原理详解

    Kotlin协程launch启动流程原理详解

    这篇文章主要为大家介绍了Kotlin协程launch启动流程原理详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-12-12
  • Android自定义View控件实现刷新效果

    Android自定义View控件实现刷新效果

    这篇文章主要介绍了Android自定义View控件实现刷新效果的相关资料,非常不错具有参考借鉴价值,需要的朋友可以参考下
    2016-11-11
  • Android 音乐播放器的开发实例详解

    Android 音乐播放器的开发实例详解

    本文主要讲解Android 音乐播放器的开发,这里给大家提供一个简单的示例代码,和实现效果图,有需要开发音乐播放器的朋友可以参考下
    2016-08-08
  • Kotlin中使用Dagger2可能遇到的坑解决

    Kotlin中使用Dagger2可能遇到的坑解决

    在Android上创建去耦以及容易测试代码的几乎每位迟早都要诉诸Dagger,在Kotlin中设置Dagger有一些不同,所以下面这篇文章主要给大家介绍了关于Kotlin中使用Dagger2可能遇到的坑的解决方法,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧。
    2017-11-11
  • Android ConnectivityManager网络管理详解

    Android ConnectivityManager网络管理详解

    在android平台中ConnectivityManager主要负责查询网络连接状态以及在连接状态有变化的时候发出通知,这篇文章主要介绍了Android ConnectivityManager网络管理
    2022-11-11
  • Android实现GridView中ImageView动态变换的方法

    Android实现GridView中ImageView动态变换的方法

    这篇文章主要介绍了Android实现GridView中ImageView动态变换的方法,以实例形式较为详细的分析了GridView中ImageView动态变换的页面布局及功能实现相关技巧,需要的朋友可以参考下
    2015-10-10
  • FragmentStatePagerAdapter保存恢复下拉刷新Fragment内存数据

    FragmentStatePagerAdapter保存恢复下拉刷新Fragment内存数据

    这篇文章主要为大家介绍了FragmentStatePagerAdapter保存恢复下拉刷新Fragment内存数据分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-02-02
  • android 线性布局LinearLayout实例代码

    android 线性布局LinearLayout实例代码

    android 线性布局LinearLayout实例代码,需要的朋友可以参考一下
    2013-05-05
  • Android实现读写JSON数据的方法

    Android实现读写JSON数据的方法

    这篇文章主要介绍了Android实现读写JSON数据的方法,以完整实例形式分析了Android解析及生成json数据的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-10-10

最新评论