android.view.InflateException:二进制XML文件行#9:使用android API 19对类android.support.v7.widget.CardView进行膨胀时出错

android.view.InflateException:二进制XML文件行#9:使用android API 19对类android.support.v7.widget.CardView进行膨胀时出错,android,android-support-library,android-cardview,Android,Android Support Library,Android Cardview,我知道这是一个非常常见的问题,我四处寻找解决方案,但到目前为止没有任何帮助 我只在API级别为19的情况下得到这个异常(我的Minsdk版本为19,compile版本为25) 我试过在以下API级别上运行模拟器,一切都很好 API level 25 - works API level 23 - works API level 22 - works API level 21 - works API level 19 - crashes with following exception 以下是例外

我知道这是一个非常常见的问题,我四处寻找解决方案,但到目前为止没有任何帮助

我只在API级别为19的情况下得到这个异常(我的Minsdk版本为19,compile版本为25)

我试过在以下API级别上运行模拟器,一切都很好

API level 25 - works
API level 23 - works
API level 22 - works
API level 21 - works
API level 19 - crashes with following exception
以下是例外情况:

android.view.InflateException: Binary XML file line #9: Error inflating class android.support.v7.widget.CardView
at android.view.LayoutInflater.createView(LayoutInflater.java:621)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:697)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:756)
at android.view.LayoutInflater.inflate(LayoutInflater.java:492)
at android.view.LayoutInflater.inflate(LayoutInflater.java:397)
at com.nitinsharma.materiallistview.CardRecycleViewAdapter.onCreateViewHolder(CardRecycleViewAdapter.java:21)
at com.nitinsharma.materiallistview.CardRecycleViewAdapter.onCreateViewHolder(CardRecycleViewAdapter.java:15)
at android.support.v7.widget.RecyclerView$Adapter.createViewHolder(RecyclerView.java:6290)
at android.support.v7.widget.RecyclerView$Recycler.tryGetViewHolderForPositionByDeadline(RecyclerView.java:5478)
at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5363)
at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5359)
at android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:2141)
at android.support.v7.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1525)
at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1488)
at android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:585)
at android.support.v7.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:3506)
at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:3254)
at android.support.v7.widget.RecyclerView.onLayout(RecyclerView.java:3767)
at android.view.View.layout(View.java:14817)
at android.view.ViewGroup.layout(ViewGroup.java:4631)
at android.widget.RelativeLayout.onLayout(RelativeLayout.java:1055)
at android.view.View.layout(View.java:14817)
at android.view.ViewGroup.layout(ViewGroup.java:4631)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453)
at android.widget.FrameLayout.onLayout(FrameLayout.java:388)
at android.view.View.layout(View.java:14817)
at android.view.ViewGroup.layout(ViewGroup.java:4631)
at android.support.v7.widget.ActionBarOverlayLayout.onLayout(ActionBarOverlayLayout.java:437)
at android.view.View.layout(View.java:14817)
at android.view.ViewGroup.layout(ViewGroup.java:4631)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453)
at android.widget.FrameLayout.onLayout(FrameLayout.java:388)
at android.view.View.layout(View.java:14817)
at android.view.ViewGroup.layout(ViewGroup.java:4631)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1671)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1525)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1434)
at android.view.View.layout(View.java:14817)
at android.view.ViewGroup.layout(ViewGroup.java:4631)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453)
at android.widget.FrameLayout.onLayout(FrameLayout.java:388)
at android.view.View.layout(View.java:14817)
at android.view.ViewGroup.layout(ViewGroup.java:4631)
at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:1987)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1744)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1000)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5670)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:761)
at android.view.Choreographer.doCallbacks(Choreographer.java:574)
at android.view.Choreographer.doFrame(Choreographer.java:544)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:747)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5017)
    at java.lang.reflect.Method.invokeNati
下面是我的毕业典礼:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 25
    buildToolsVersion "25.0.1"
    defaultConfig {
        applicationId "com.nitinsharma.materiallistview"
        minSdkVersion 19
        targetSdkVersion 25
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

    dependencies {
        compile fileTree(dir: 'libs', include: ['*.jar'])
        androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
            exclude group: 'com.android.support', module: 'support-annotations'
        })
        testCompile 'junit:junit:4.12'


        compile 'com.android.support:cardview-v7:25.+'
        compile 'com.android.support:appcompat-v7:25.+'
        compile 'com.android.support:recyclerview-v7:25.+'
        compile 'com.android.support:cardview-v7:25.+'
        compile 'com.android.support:gridlayout-v7:25.+'
        compile 'com.android.support:support-v4:25.+'
        compile 'com.android.support:design:25.+'
    }

}
最后是我的card_view.xml文件:

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"

    xmlns:android="http://schemas.android.com/apk/res/android">

<android.support.v7.widget.CardView
    xmlns:card_view="http://schemas.android.com/apk/res-auto"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/bottomcardview"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    card_view:cardBackgroundColor="@android:color/transparent"
    card_view:cardElevation="-1dp"
    >


    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">

    <android.support.v7.widget.CardView
        android:id="@+id/topcardview"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        card_view:cardBackgroundColor="@android:color/white"
        card_view:cardUseCompatPadding="true"
        card_view:cardElevation="6dp"
        card_view:cardCornerRadius="4dp"
        android:transitionName="content"

        >

        <ImageView
            android:id="@+id/cardImage"
            android:layout_width="100dp"
            android:layout_height="match_parent"
            android:layout_gravity="left"
            android:transitionName="image"
            />
        <ImageView
            android:id="@+id/arrow"
            android:layout_width="50dp"
            android:layout_height="match_parent"
            android:layout_gravity="right|bottom"/>
        <TextView
            android:id="@+id/cardtext"
            android:layout_gravity="top|left"
            android:layout_marginLeft="110dp"
            android:textColor="#000"
            android:textSize="22sp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:shadowColor="@android:color/black"
            android:fontFamily="sans-serif"
            android:elevation="4dp"
            android:textStyle="normal|bold"
            android:textAllCaps="false" />

        <TextView
            android:id="@+id/cardtextsubs"
            android:text="Hello World"
            android:layout_marginLeft="110dp"
            android:layout_marginRight="50dp"
            android:layout_gravity="bottom"
            android:textColor="#000"
            android:textSize="13sp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:shadowColor="@android:color/black"
            android:fontFamily="sans-serif"
            android:elevation="4dp"
            android:textStyle="normal|italic"
            android:textAllCaps="false" />


        <View
            android:id="@+id/dividerLeft"
            android:layout_marginLeft="100dp"
            android:layout_width="2dp"
            android:layout_height="match_parent"
            android:elevation="8dp"
            android:background="?android:attr/listDivider"/>


        </android.support.v7.widget.CardView>


 </RelativeLayout>

</android.support.v7.widget.CardView>

</RelativeLayout>

这是因为
card\u视图:cardElevation=“-1dp”
值必须
=0

  • cardwiew
    方法
    initialize(上下文上下文、属性集attrs、int defStyleAttr)
    中,它调用
    IMPL.initialize(mCardViewDelegate、上下文、背景色、半径、,
    标高,最大标高)
  • IMPL
    如下所示:

    static {
    if (Build.VERSION.SDK_INT >= 21) {
        IMPL = new CardViewApi21();
    } else if (Build.VERSION.SDK_INT >= 17) {
        IMPL = new CardViewJellybeanMr1();
    } else {
        IMPL = new CardViewGingerbread();
    }
    IMPL.initStatic();
    
    }

  • 由于API级别低于21,因此创建了
    CardViewJellybeanMr1
  • CardViewJellybeanMr1 35; initialize
    中,它调用
    createBackground-->new RoundRectDrawableWithShadow-->setShadowSize
    ,这里它说:

    if (shadowSize < 0f) {
        throw new IllegalArgumentException("Invalid shadow size " + shadowSize +
                ". Must be >= 0");
    }
    
    if(阴影大小<0f){
    抛出新的IllegalArgumentException(“无效阴影大小”+阴影大小+
    “。必须大于等于0”);
    }
    

  • shadowSize
    cardElevation
    相同,这是因为
    card\u视图:cardElevation=“-1dp”
    值必须
    =0

  • cardwiew
    方法
    initialize(上下文上下文、属性集attrs、int defStyleAttr)
    中,它调用
    IMPL.initialize(mCardViewDelegate、上下文、背景色、半径、,
    标高,最大标高)
  • IMPL
    如下所示:

    static {
    if (Build.VERSION.SDK_INT >= 21) {
        IMPL = new CardViewApi21();
    } else if (Build.VERSION.SDK_INT >= 17) {
        IMPL = new CardViewJellybeanMr1();
    } else {
        IMPL = new CardViewGingerbread();
    }
    IMPL.initStatic();
    
    }

  • 由于API级别低于21,因此创建了
    CardViewJellybeanMr1
  • CardViewJellybeanMr1 35; initialize
    中,它调用
    createBackground-->new RoundRectDrawableWithShadow-->setShadowSize
    ,这里它说:

    if (shadowSize < 0f) {
        throw new IllegalArgumentException("Invalid shadow size " + shadowSize +
                ". Must be >= 0");
    }
    
    if(阴影大小<0f){
    抛出新的IllegalArgumentException(“无效阴影大小”+阴影大小+
    “。必须大于等于0”);
    }
    

  • shadowSize
    cardElevation

    相同,您的logcat没有由
    引起的
    。寻找原因嘿,这就是我在应用程序崩溃时在堆栈跟踪中得到的所有信息。没有任何原因。嗯,
    xmlns:card_视图
    xmlns:android
    应该仅位于顶层元素,并且通常
    xmlns:card_视图
    被称为
    xmlns:app
    ,因为它不特定于CardViewThank。尝试进行这两个xmlns更改。不走运。顺便问一下,你觉得这个渐变色好看吗?这些版本的support library和compileSDK版本应该与API级别19兼容,对吗?如果我没有错的话,它们在API 7之前应该是好的?我知道xmlns不能解决任何问题。我刚从你的例外消息中脱线。我一般不使用加号来表示版本号,只要我能避免,你的logcat没有由
    引起的
    。寻找原因嘿,这就是我在应用程序崩溃时在堆栈跟踪中得到的所有信息。没有任何原因。嗯,
    xmlns:card_视图
    xmlns:android
    应该仅位于顶层元素,并且通常
    xmlns:card_视图
    被称为
    xmlns:app
    ,因为它不特定于CardViewThank。尝试进行这两个xmlns更改。不走运。顺便问一下,你觉得这个渐变色好看吗?这些版本的support library和compileSDK版本应该与API级别19兼容,对吗?如果我没有错的话,它们在API 7之前应该是好的?我知道xmlns不能解决任何问题。我刚从你的例外消息中脱线。我一般不会用加号来表示版本号,只要我能避免它,这是一个很好的观察。非常感谢!:)它解决了我的问题。这是我的荣幸。很好的观察。非常感谢!:)它解决了我的问题,这是我的荣幸。