Binary XML file line #9: Error inflating class

  • Post author:
  • Post category:其他


报错日志

02-22 23:12:44.403 29776-29776/com.example.btn_press E/AndroidRuntime: FATAL EXCEPTION: main

Process: com.example.btn_press, PID: 29776

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.btn_press/com.example.btn_press.MainActivity}: android.view.InflateException: Binary XML file line #9: Error inflating class Button

at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2361)

at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2423)

at android.app.ActivityThread.access$1000(ActivityThread.java:154)

at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1326)

at android.os.Handler.dispatchMessage(Handler.java:102)

at android.os.Looper.loop(Looper.java:135)

at android.app.ActivityThread.main(ActivityThread.java:5315)

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:912)

at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:707)

Caused by: android.view.InflateException: Binary XML file line #9: Error inflating class Button

at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:767)

at android.view.LayoutInflater.rInflate(LayoutInflater.java:810)

at android.view.LayoutInflater.inflate(LayoutInflater.java:508)

at android.view.LayoutInflater.inflate(LayoutInflater.java:418)

at android.view.LayoutInflater.inflate(LayoutInflater.java:365)

at androidx.appcompat.app.AppCompatDelegateImpl.setContentView(AppCompatDelegateImpl.java:469)

at androidx.appcompat.app.AppCompatActivity.setContentView(AppCompatActivity.java:140)

at com.example.btn_press.MainActivity.onCreate(MainActivity.java:12)

at android.app.Activity.performCreate(Activity.java:6098)

at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106)

at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2314)

at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2423)

at android.app.ActivityThread.access$1000(ActivityThread.java:154)

at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1326)

at android.os.Handler.dispatchMessage(Handler.java:102)

at android.os.Looper.loop(Looper.java:135)

at android.app.ActivityThread.main(ActivityThread.java:5315)

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:912)

at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:707)

Caused by: android.content.res.Resources$NotFoundException: File res/color/btn_bg_state.xml from drawable resource ID #0x7f040024

at android.content.res.Resources.loadDrawableForCookie(Resources.java:2579)

at android.content.res.Resources.loadDrawable(Resources.java:2468)

at android.content.res.MiuiResources.loadDrawable(MiuiResources.java:394)

at android.content.res.TypedArray.getDrawable(TypedArray.java:771)

at android.view.View.<init>(View.java:3746)

at android.widget.TextView.<init>(TextView.java:640)

at android.widget.Button.<init>(Button.java:111)

at android.widget.Button.<init>(Button.java:107)

at androidx.appcompat.widget.AppCompatButton.<init>(AppCompatButton.java:71)

at androidx.appcompat.widget.AppCompatButton.<init>(AppCompatButton.java:67)

at androidx.appcompat.app.AppCompatViewInflater.createButton(AppCompatViewInflater.java:187)

at androidx.appcompat.app.AppCompatViewInflater.createView(AppCompatViewInflater.java:110)

at androidx.appcompat.app.AppCompatDelegateImpl.createView(AppCompatDelegateImpl.java:1266)

at androidx.appcompat.app.AppCompatDelegateImpl.onCreateView(AppCompatDelegateImpl.java:1316)

at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:729)

at android.view.LayoutInflater.rInflate(LayoutInflater.java:810)

at android.view.LayoutInflater.inflate(LayoutInflater.java:508)

at android.view.LayoutInflater.inflate(LayoutInflater.java:418)

at android.view.LayoutInflater.inflate(LayoutInflater.java:365)

at androidx.appcompat.app.AppCompatDelegateImpl.setContentView(AppCompatDelegateImpl.java:469)

at androidx.appcompat.app.AppCompatActivity.setContentView(AppCompatActivity.java:140)

at com.example.btn_press.MainActivity.onCreate(MainActivity.java:12)

at android.app.Activity.performCreate(Activity.java:6098)

at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106)

at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2314)

at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2423)

at android.app.ActivityThread.access$1000(ActivityThread.java:154)

at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1326)

at android.os.Handler.dispatchMessage(Handler.java:102)

at android.os.Looper.loop(Looper.java:135)

at android.app.ActivityThread.main(ActivityThread.java:5315)

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:912)

at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:707)

Caused by: org.xmlpull.v1.XmlPullParserException: Binary XML file line #3: <item> tag requires a ‘drawable’ attribute or child tag defining a drawable

at android.graphics.drawable.StateListDrawable.inflateChildElements(StateListDrawable.java:194)

at android.graphics.drawable.StateListDrawable.inflate(StateListDrawable.java:127)

at android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:1130)

at android.graphics.drawable.Drawable.createFromXml(Drawable.java:1034)

at android.content.res.Resources.createFromXml(Resources.java:2884)

at android.content.res.Resources.loadDrawableForCookie(Resources.java:2565)

at android.content.res.Resources.loadDrawable(Resources.java:2468)

at android.content.res.MiuiResources.loadDrawable(MiuiResources.java:394)

at android.content.res.TypedArray.getDrawable(TypedArray.java:771)

at android.view.View.<init>(View.java:3746)

at android.widget.TextView.<init>(TextView.java:640)

at android.widget.Button.<init>(Button.java:111)

at android.widget.Button.<init>(Button.java:107)

at androidx.appcompat.widget.AppCompatButton.<init>(AppCompatButton.java:71)

at androidx.appcompat.widget.AppCompatButton.<init>(AppCompatButton.java:67)

at androidx.appcompat.app.AppCompatViewInflater.createButton(AppCompatViewInflater.java:187)

at androidx.appcompat.app.AppCompatViewInflater.createView(AppCompatViewInflater.java:110)

at androidx.appcompat.app.AppCompatDelegateImpl.createView(AppCompatDelegateImpl.java:1266)

at androidx.appcompat.app.AppCompatDelegateImpl.onCreateView(AppCompatDelegateImpl.java:1316)

at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:729)

at android.view.LayoutInflater.rInflate(LayoutInflater.java:810)

at android.view.LayoutInflater.inflate(LayoutInflater.java:508)

at android.view.LayoutInflater.inflate(LayoutInflater.java:418)

at android.view.LayoutInflater.inflate(LayoutInflater.java:365)

at androidx.appcompat.app.AppCompatDelegateImpl.setContentView(AppCompatDelegateImpl.java:469)

at androidx.appcompat.app.AppCompatActivity.setContentView(AppCompatActivity.java:140)

at com.example.btn_press.MainActivity.onCreate(MainActivity.java:12)

at android.app.Activity.performCreate(Activity.java:6098)

at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106)

at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2314)

at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2423)

at android.app.ActivityThread.access$1000(ActivityThread.java:154)

at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1326)

at android.os.Handler.dispatchMessage(Handler.java:102)

at android.os.Looper.loop(Looper.java:135)

at android.app.ActivityThread.main(ActivityThread.java:5315)

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:912)

at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:707)

报错关键信息

02-22 23:12:44.403 29776-29776/com.example.btn_press E/AndroidRuntime: FATAL EXCEPTION: main

Process: com.example.btn_press, PID: 29776

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.btn_press/com.example.btn_press.MainActivity}: android.view.InflateException: Binary XML file line #9: Error inflating class Button

Caused by: android.view.InflateException: Binary XML file line #9: Error inflating class Button

Caused by: android.content.res.Resources$NotFoundException: File res/color/btn_bg_state.xml from drawable resource ID #0x7f040024

Caused by: org.xmlpull.v1.XmlPullParserException: Binary XML file line #3: <item> tag requires a ‘drawable’ attribute or child tag defining a drawable

原因

多半是因为 “android:background”书写的问题

当为 “android:background” 设置颜色选择器(selector)时,绑定“@color/xxx” 是错误的写法,如下:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="我是一个button"
        android:background="@color/btn_bg_state"   //这种写法是错误的
        android:textColor="@color/btn_bg_state"
        android:layout_centerInParent="true"/>

</RelativeLayout>

尽管存在color文件夹及btn_bg_state.xml文件

解决方法

正确书写方式:如下

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="我是一个button"
        android:background="@drawable/btn_bg_state"  //正确的书写方式
        android:textColor="@color/btn_bg_state"
        android:layout_centerInParent="true"/>

</RelativeLayout>

配套的 drawable 文件夹下的 btn_bg_start.xml 文件书写方式

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="false">
        <color android:color="#000"/>
    </item>
    <item android:state_pressed="true">
        <color android:color="#ccc"/>
    </item>
</selector>

效果图

未点击效果图

点击效果图



版权声明:本文为qq_41885673原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。