Java Android:在使用自定义绘图工具时,在pre Lollipop(SDK 16)上膨胀类ImageView时出错?
我刚刚在SDK 16设备和emulator上测试了我的应用程序,两次都出现以下错误: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
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>