Android 报错:InflateException: Binary XML file line #10: Error inflating class android.webkit.WebView

在Android 5.1设备上运行包含WebView的布局时,遇到InflateException错误。问题出在layout的XML文件中。通过将android.webkit.WebView的引用从<WebView/>更改为<android.webkit.WebView/>解决了问题,但使用<WebView app:layout_behavior="@string/appbar_scrolling_view_behavior"/>会导致错误持续存在。

问题描述

只是在 layout 中引入了 WebView ,然后在 Activity 中写了setContentView(),在 Android 5.1 的机子运行时就出现了错误。
代码如下:
activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".webviewtest.Main18Activity">

    <WebView
        android:id="@+id/web_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
</LinearLayout>

MainActivity.java

import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import com.example.myapplication.R;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
}

报错如下:

com.example.myapplication E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.myapplication, PID: 23923
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.myapplication/com.example.myapplication.webviewtest.Main18Activity}: android.view.InflateException: Binary XML file line #10: Error inflating class android.webkit.WebView
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2510)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2579)
        at android.app.ActivityThread.access$800(ActivityThread.java:176)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1452)
        at android.os.Handler.dispatchMessage(Handler.java:111)
        at android.os.Looper.loop(Looper.java:192)
        at android.app.ActivityThread.main(ActivityThread.java:5618)
        at java.lang.reflect.Method.invoke(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:372)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:976)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:771)
     Caused by: android.view.InflateException: Binary XML file line #10: Error inflating class android.webkit.WebView
        at android.view.LayoutInflater.createView(LayoutInflater.java:633)
        at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:55)
        at android.view.LayoutInflater.onCreateView(LayoutInflater.java:682)
        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:741)
        at android.view.LayoutInflater.rInflate(LayoutInflater.java:806)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:504)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:414)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:365)
        at androidx.appcompat.app.AppCompatDelegateImpl.setContentView(AppCompatDelegateImpl.java:555)
        at androidx.appcompat.app.AppCompatActivity.setContentView(AppCompatActivity.java:161)
        at com.example.myapplication.webviewtest.Main18Activity.onCreate(Main18Activity.java:16)
        at android.app.Activity.performCreate(Activity.java:6135)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1122)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2463)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2579) 
        at android.app.ActivityThread.access$800(ActivityThread.java:176) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1452) 
        at android.os.Handler.dispatchMessage(Handler.java:111) 
        at android.os.Looper.loop(Looper.java:192) 
        at android.app.ActivityThread.main(ActivityThread.java:5618) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at java.lang.reflect.Method.invoke(Method.java:372) 
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:976) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:771) 
     Caused by: java.lang.reflect.InvocationTargetException
        at java.lang.reflect.Constructor.newInstance(Native Method)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:288)
        at android.view.LayoutInflater.createView(LayoutInflater.java:607)
        at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:55) 
        at android.view.LayoutInflater.onCreateView(LayoutInflater.java:682) 
        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:741) 
        at android.view.LayoutInflater.rInflate(LayoutInflater.java:806) 
        at android.view.LayoutInflater.inflate(LayoutInflater.java:504) 
        at android.view.LayoutInflater.inflate(LayoutInflater.java:414) 
        at android.view.LayoutInflater.inflate(LayoutInflater.java:365) 
        at androidx.appcompat.app.AppCompatDelegateImpl.setContentView(AppCompatDelegateImpl.java:555) 
        at androidx.appcompat.app.AppCompatActivity.setContentView(AppCompatActivity.java:161) 
        at com.example.myapplication.webviewtest.Main18Activity.onCreate(Main18Activity.java:16) 
        at android.app.Activity.performCreate(Activity.java:6135) 
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1122) 
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2463) 
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2579) 
        at android.app.ActivityThread.access$800(ActivityThread.java:176) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1452) 
        at android.os.Handler.dispatchMessage(Handler.java:111) 
        at android.os.Looper.loop(Looper.java:192) 
        at android.app.ActivityThread.main(ActivityThread.java:5618) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at java.lang.reflect.Method.invoke(Method.java:372) 
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:976) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:771) 
     Caused by: android.content.res.Resources$NotFoundException: String resource ID #0x2040003
        at android.content.res.Resources.getText(Resources.java:322)
        at android.content.res.Resources.getString(Resources.java:420)
        at com.android.org.chromium.content.browser.ContentViewCore.setContainerView(ContentViewCore.java:684)
        at com.android.org.chromium.content.browser.ContentViewCore.initialize(ContentViewCore.java:608)
        at com.android.org.chromium.android_webview.AwContents.createAndInitializeContentViewCore(AwContents.java:674)
        at com.android.org.chromium.android_webview.AwContents.setNewAwContents(AwContents.java:823)
        at com.android.org.chromium.android_webview.AwContents.<init>(AwContents.java:662)
        at com.android.org.chromium.android_webview.AwContents.<init>(AwContents.java:597)
        at com.android.webview.chromium.WebViewChromium.initForReal(WebViewChromium.java:319)
        at com.android.webview.chromium.WebViewChromium.access$100(WebViewChromium.java:104)
        at com.android.webview.chromium.WebViewChromium$1.run(WebViewChromium.java:271)
        at com.android.webview.chromium.WebViewChromium$WebViewChromiumRunQueue.drainQueue(WebViewChromium.java:131)
        at com.android.webview.chromium.WebViewChromium$WebViewChromiumRunQueue$1.run(WebViewChromium.java:118)
        at com.android.org.chromium.base.ThreadUtils.runOnUiThread(ThreadUtils.java:144)
        at com.android.webview.chromium.WebViewChromium$WebViewChromiumRunQueue.addTask(WebViewChromium.java:115)
        at com.android.webview.chromium.WebViewChromium.init(WebViewChromium.java:268)
    	at android.webkit.WebView.<init>(WebView

解决方案

将 app 目录下的 build.gradle 文件里的
implementation 'androidx.appcompat:appcompat:1.1.0'
修改为
implementation 'androidx.appcompat:appcompat:1.0.2'
经测试,修改为 版本 1.2.0-alpha01 仍然会出现错误。

### 解决Android中TextView类在加载XML布局时引发的InflateException问题 在Android开发中,`android.view.InflateException`通常表示在尝试从XML文件中加载视图时发生了错误。根据提供的信息,该问题可能与主题不兼容、资源未正确定义或样式冲突有关[^1]。 以下是一些可能导致此问题的原因及解决方案: #### 1. 主题不兼容 如果Activity的主题不是`Theme.AppCompat`或其子类,则可能会导致`InflateException`。这是因为某些控件(如`TextView`)依赖于`AppCompat`主题中的特定属性[^1]。 确保在`AndroidManifest.xml`中为相关Activity设置正确的主题: ```xml <activity android:name=".YourActivity" android:theme="@style/Theme.AppCompat.Light"> </activity> ``` #### 2. 资源类型错误 错误消息提到`Resource is not a Drawable (color or path)`,这表明某个资源被错误地引用为Drawable,而实际上它并不是。检查布局文件中的`TextView`是否引用了无效的资源。例如,以下代码可能导致问题: ```xml <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@string/some_string" /> ``` 上述代码中,`@string/some_string`被错误地用作背景资源。应改为有效的Drawable资源或颜色值: ```xml <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@color/your_color" /> ``` #### 3. 样式冲突 虽然引用[2]提到默认的`TextView`样式通常不会有问题,但如果自定义了样式,可能会引入冲突。确保自定义样式的父类是`TextAppearance.AppCompat`或类似的兼容样式[^2]。例如: ```xml <style name="CustomTextStyle" parent="TextAppearance.AppCompat"> <item name="android:textColor">@color/text_color</item> <item name="android:textSize">16sp</item> </style> ``` 然后在布局中应用该样式: ```xml <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" style="@style/CustomTextStyle" /> ``` #### 4. 版本兼容性 如果使用的是较新的AndroidX库,而项目中仍存在旧版支持库的引用(如`android.support.design.internal.NavigationMenuView`),可能会导致兼容性问题。建议将所有支持库迁移到AndroidX,并确保Gradle文件中版本一致: ```gradle implementation &#39;androidx.appcompat:appcompat:1.4.1&#39; implementation &#39;com.google.android.material:material:1.6.0&#39; ``` #### 5. 检查日志中的具体行号 错误消息中提到`Binary XML file line #17`,这表示问题出现在XML文件的第17行。仔细检查该行及其附近的代码,确保没有无效的资源引用或语法错误。 --- ### 示例代码 以下是一个完整的布局文件示例,展示了如何避免常见的`InflateException`问题: ```xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <TextView android:id="@+id/my_text_view" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello World" android:textColor="@color/black" android:background="@drawable/background_shape" /> </LinearLayout> ``` 同时,确保`res/drawable/background_shape.xml`文件存在且格式正确: ```xml <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <solid android:color="@color/white" /> </shape> ``` ---
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值