You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android 8(Oreo)WebView中出现Resources$NotFoundException问题

解决Android 8.0 WebView点击下拉框抛出Resources$NotFoundException的问题

这个坑我之前踩过!你遇到的问题是Android 8.0(API 26)对WebView原生下拉控件的行为做了变更导致的——当网页里的<select>下拉框唤起系统原生弹窗时,因为主题资源没有正确初始化,就会抛出Resource ID #0x0的找不到资源异常,而低版本系统没有这个限制所以运行正常。

下面是几个亲测有效的解决方案:

1. 修正WebView所在Activity的主题

Android 8.0开始,WebView的原生弹窗依赖系统主题的相关资源,如果你的Activity主题脱离了系统基础主题,就容易出现资源缺失。

  • 确保Activity的主题继承自Theme.AppCompat或Theme.MaterialComponents系列,比如在AndroidManifest.xml中修改:
    <activity
        android:name=".YourWebViewHostActivity"
        android:theme="@style/Theme.AppCompat.Light.NoActionBar">
    </activity>
    
  • 如果需要自定义主题,也要保证包含弹窗相关的必要属性:
    <style name="CustomWebViewActivityTheme" parent="Theme.AppCompat.Light">
        <item name="android:alertDialogTheme">@style/Theme.AppCompat.Light.Dialog.Alert</item>
    </style>
    

2. 显式设置WebView的弹窗主题

API 26新增了WebSettings.setPopupWindowTheme()方法,我们可以通过这个方法强制指定WebView弹窗使用的主题,避免系统找不到资源:

WebView webView = findViewById(R.id.your_webview);
WebSettings webSettings = webView.getSettings();

// 只在Android 8.0及以上版本生效
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
    webSettings.setPopupWindowTheme(R.style.Theme_AppCompat_Light);
}

3. 替代方案:改用网页端自定义下拉组件

如果上面的系统级方案都不生效,可以联系网页开发者,把原生的<select>标签替换成网页自定义的下拉UI(比如用JS/CSS实现的模拟下拉框)。这样就不会唤起系统原生弹窗,从根源上规避这个资源问题,同时还能实现更统一的跨端样式。

按照上面的方法调整后,在Android 8.0设备上测试点击下拉框,应该就不会再出现崩溃了,而且低版本的兼容性也不会受影响。

内容的提问来源于stack exchange,提问作者Mayur_Thakur

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 08:28:13