Java Android:在使用自定义绘图工具时,在pre Lollipop(SDK 16)上膨胀类ImageView时出错?

Java Android:在使用自定义绘图工具时,在pre Lollipop(SDK 16)上膨胀类ImageView时出错?,java,android,imageview,Java,Android,Imageview,我刚刚在SDK 16设备和emulator上测试了我的应用程序,两次都出现以下错误: E/AndroidRuntime: FATAL EXCEPTION: main android.view.InflateException: Binary XML file line #9: Error inflating class ImageView

我刚刚在SDK 16设备和emulator上测试了我的应用程序,两次都出现以下错误:

E/AndroidRuntime: FATAL EXCEPTION: main
                                                                             android.view.InflateException: Binary XML file line #9: Error inflating class ImageView
                                                                                 at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:704)
                                                                                 at android.view.LayoutInflater.rInflate(LayoutInflater.java:746)
                                                                                 at android.view.LayoutInflater.inflate(LayoutInflater.java:489)
                                                                                 at android.view.LayoutInflater.inflate(LayoutInflater.java:396)
                                                                                 at com.eliburgi.foodallergydiary.ui.diarypage.adapters.DrinkEntryBulletAdapter.onCreateViewHolder(DrinkEntryBulletAdapter.java:53)
                                                                                 at com.eliburgi.foodallergydiary.ui.diarypage.adapters.DrinkEntryBulletAdapter.onCreateViewHolder(DrinkEntryBulletAdapter.java:23)
                                                                                 at android.support.v7.widget.RecyclerView$Adapter.createViewHolder(RecyclerView.java:6367)
                                                                                 at android.support.v7.widget.RecyclerView$Recycler.tryGetViewHolderForPositionByDeadline(RecyclerView.java:5555)
                                                                                 at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5440)
                                                                                 at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5436)
                                                                                 at android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:2224)
                                                                                 at android.support.v7.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1551)
                                                                                 at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1511)
                                                                                 at android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:595)
                                                                                 at android.support.v7.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:3583)
                                                                                 at android.support.v7.widget.RecyclerView.onMeasure(RecyclerView.java:3025)
                                                                                 at android.view.View.measure(View.java:15172)
                                                                                 at android.support.constraint.ConstraintLayout.internalMeasureChildren(ConstraintLayout.java:934)
                                                                                 at android.support.constraint.ConstraintLayout.onMeasure(ConstraintLayout.java:973)
                                                                                 at android.view.View.measure(View.java:15172)
                                                                                 at android.support.v7.widget.RecyclerView$LayoutManager.measureChildWithMargins(RecyclerView.java:8636)
                                                                                 at android.support.v7.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1577)
                                                                                 at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1511)
                                                                                 at android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:595)
                                                                                 at android.support.v7.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:3583)
                                                                                 at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:3312)
                                                                                 at android.support.v7.widget.RecyclerView.onLayout(RecyclerView.java:3844)
                                                                                 at android.view.View.layout(View.java:13754)
                                                                                 at android.view.ViewGroup.layout(ViewGroup.java:4364)
                                                                                 at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1649)
                                                                                 at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1507)
                                                                                 at android.widget.LinearLayout.onLayout(LinearLayout.java:1420)
                                                                                 at android.view.View.layout(View.java:13754)
                                                                                 at android.view.ViewGroup.layout(ViewGroup.java:4364)
                                                                                 at android.support.v4.view.ViewPager.onLayout(ViewPager.java:1795)
                                                                                 at android.view.View.layout(View.java:13754)
                                                                                 at android.view.ViewGroup.layout(ViewGroup.java:4364)
                                                                                 at android.widget.FrameLayout.onLayout(FrameLayout.java:448)
                                                                                 at android.view.View.layout(View.java:13754)
                                                                                 at android.view.ViewGroup.layout(ViewGroup.java:4364)
                                                                                 at android.support.design.widget.HeaderScrollingViewBehavior.layoutChild(HeaderScrollingViewBehavior.java:131)
                                                                                 at android.support.design.widget.ViewOffsetBehavior.onLayoutChild(ViewOffsetBehavior.java:42)
                                                                                 at android.support.design.widget.AppBarLayout$ScrollingViewBehavior.onLayoutChild(AppBarLayout.java:1391)
                                                                                 at android.support.design.widget.CoordinatorLayout.onLayout(CoordinatorLayout.java:870)
                                                                                 at android.view.View.layout(View.java:13754)
                                                                                 at android.view.ViewGroup.layout(ViewGroup.java:4364)
                                                                                 at android.support.v4.widget.DrawerLayout.onLayout(DrawerLayout.java:1193)
                                                                                 at android.view.View.layout(View.java:13754)
                                                                                 at android.view.ViewGroup.layout(ViewGroup.java:4364)
                                                                                 at android.widget.FrameLayout.onLayout(FrameLayout.java:448)
                                                                                 at android.view.View.layout(View.java:13754)
                                                                                at android.view.ViewGroup.layout(ViewGroup.jav
在SDK 21和更高版本上,一切正常,但对于早期版本,程序无法解析以下ImageView:

<ImageView
        style="@style/BulletListItemIcon.Drink"
        android:layout_gravity="center_vertical"
        android:layout_marginLeft="@dimen/margin_left_diary_entry_bullet_keyline"
        android:layout_marginStart="@dimen/margin_left_diary_entry_bullet_keyline" />
bg\u drink\u icon\u gradient.xml中

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

    <gradient xmlns:android="http://schemas.android.com/apk/res/android"
    android:angle="135"
    android:startColor="@color/drink_gradient"
    android:endColor="@color/drink_gradient_dark"
    android:type="linear" />

    <stroke android:color="@color/icon_border" android:width="@dimen/border_width_icons"/>

</shape>

对于ImageView,在上述样式中使用颜色或SVG可绘制可以很好地工作,但使用自定义可绘制却失败了。我不知道为什么这不起作用,所以我非常感谢任何提示和答案,谢谢:)

我的自定义XML绘图可能有一些错误。我注释掉了stroke标签,效果很好。我会尝试一下遗漏的东西,然后告诉你

<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="oval">
    <solid android:color="@color/blue"/>
    <!--<stroke android:color="@color/icon_border" android:width="@dimen/border_width_icons"/>-->
</shape>

如果有人知道怎么了,请告诉我

编辑:我想我知道是什么导致了这个错误。所有自定义XML drawables笔划标记都使用以下颜色定义:

<color name="icon_border">?android:colorBackground</color>
?安卓:彩色背景
有谁能向我解释一下为什么这在SDK 16上不起作用

编辑:现在可以了。我只是将上述颜色定义替换为:

<color name="app_background">##FFFAFAFA</color>
<color name="icon_border">@color/app_background</color>
##FFFAFAFA
@颜色/应用程序背景
我已经将主题属性
android:backgroundColor
设置为我的颜色
app\u background


谢谢你的帮助:)

我也遇到了同样的问题。解决方案是用android.support.v7.widget.AppCompatImageView替换ImageView

除了srcCompat之外,您还尝试过使用src吗?是的。同样的错误…和背景?还是背景图?同样的错误。谢谢你试着帮助我,顺便说一下:)试着直接在xml中而不是在样式中放置布局高度和布局宽度确实,你不能在资源文件中引用主题属性,比如API 21之前的颜色或绘图。使用AppCompat实现时,向量可绘制性是个例外。
<style name="BulletListItemIcon.Drink">
        <item name="srcCompat">@drawable/ic_profile</item>
    </style>
android {
    compileSdkVersion 25
    buildToolsVersion "25.0.1"
    defaultConfig {
        applicationId "com.eliburgi.foodallergydiary"
        minSdkVersion 16
        targetSdkVersion 25
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        vectorDrawables.useSupportLibrary = true
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="oval">
    <solid android:color="@color/blue"/>
    <!--<stroke android:color="@color/icon_border" android:width="@dimen/border_width_icons"/>-->
</shape>
<color name="icon_border">?android:colorBackground</color>
<color name="app_background">##FFFAFAFA</color>
<color name="icon_border">@color/app_background</color>