InflateException:为 VectorDrawableCompat 膨胀 class ImageView 时出错
InflateException: Error inflating class ImageView for VectorDrawableCompat
VectorDrawableCompat
终于进入了 SDK 23 的支持库。但它似乎不起作用,或者我可能遗漏了什么。
drawable/mypic.xml
:
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:height="64dp"
android:width="64dp"
android:viewportHeight="600"
android:viewportWidth="600" >
<group
android:name="rotationGroup"
android:pivotX="300.0"
android:pivotY="300.0"
android:rotation="45.0" >
<path
android:name="v"
android:fillColor="#000000"
android:pathData="M300,70 l 0,-70 70,70 0,0 -70,70z" />
</group>
</vector>
fragment_bla.xml
:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:src="@drawable/mypic"
android:scaleType="centerCrop" />
</FrameLayout>
此代码适用于 Lollipop,但不适用于 KitKat。我错过了什么?
异常:
09-06 14:26:53.637 31820-31820/com.bla E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.bla, PID: 31560
android.view.InflateException: Binary XML file line #7: Error inflating class android.widget.ImageView
at android.view.LayoutInflater.createView(LayoutInflater.java:623)
at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56)
at android.view.LayoutInflater.onCreateView(LayoutInflater.java:672)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:697)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:758)
at android.view.LayoutInflater.inflate(LayoutInflater.java:495)
at android.view.LayoutInflater.inflate(LayoutInflater.java:400)
at com.hohero.fragment.Intro1Fragment.onCreateView(Intro1Fragment.java:14)
at android.support.v4.app.Fragment.performCreateView(Fragment.java:1962)
好吧,我阅读了代码并让它工作了。有几个注意事项:
- xml文件必须在raw目录下,不可绘制
- xml一定很简单。看起来它支持单个
元素
对我来说,它总是有红色背景,而且缩放比例似乎不正确。我刚刚使用了 Studio Collection 中的 Vector Asset Action -> (lock)。
final Drawable drawable = VectorDrawableCompat.createFromResource(getResources(), R.raw.ic_lock_outline_24dp);
imageView.setImageDrawable(drawable);
这是一个好的开始,玩起来很有趣!
Link 到 Google 未知分支中的来源:
https://android.googlesource.com/platform/frameworks/support/+/d573775216408a88e796cd74abf8ab018488c2a3/v7/vectordrawable/src/android/support/v7/graphics/drawable
我认为问题是
android:src="@drawable/mypic"
在您的 imageView 设置中。
改成
app:srcCompat="@drawable/mypic"
那么你应该可以开始了。
更多详情请参考:
https://medium.com/@chrisbanes/appcompat-v23-2-age-of-the-vectors-91cbafa87c88#.mvuq06x1k
VectorDrawableCompat
终于进入了 SDK 23 的支持库。但它似乎不起作用,或者我可能遗漏了什么。
drawable/mypic.xml
:
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:height="64dp"
android:width="64dp"
android:viewportHeight="600"
android:viewportWidth="600" >
<group
android:name="rotationGroup"
android:pivotX="300.0"
android:pivotY="300.0"
android:rotation="45.0" >
<path
android:name="v"
android:fillColor="#000000"
android:pathData="M300,70 l 0,-70 70,70 0,0 -70,70z" />
</group>
</vector>
fragment_bla.xml
:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:src="@drawable/mypic"
android:scaleType="centerCrop" />
</FrameLayout>
此代码适用于 Lollipop,但不适用于 KitKat。我错过了什么?
异常:
09-06 14:26:53.637 31820-31820/com.bla E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.bla, PID: 31560
android.view.InflateException: Binary XML file line #7: Error inflating class android.widget.ImageView
at android.view.LayoutInflater.createView(LayoutInflater.java:623)
at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56)
at android.view.LayoutInflater.onCreateView(LayoutInflater.java:672)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:697)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:758)
at android.view.LayoutInflater.inflate(LayoutInflater.java:495)
at android.view.LayoutInflater.inflate(LayoutInflater.java:400)
at com.hohero.fragment.Intro1Fragment.onCreateView(Intro1Fragment.java:14)
at android.support.v4.app.Fragment.performCreateView(Fragment.java:1962)
好吧,我阅读了代码并让它工作了。有几个注意事项:
- xml文件必须在raw目录下,不可绘制
- xml一定很简单。看起来它支持单个
元素
对我来说,它总是有红色背景,而且缩放比例似乎不正确。我刚刚使用了 Studio Collection 中的 Vector Asset Action -> (lock)。
final Drawable drawable = VectorDrawableCompat.createFromResource(getResources(), R.raw.ic_lock_outline_24dp);
imageView.setImageDrawable(drawable);
这是一个好的开始,玩起来很有趣!
Link 到 Google 未知分支中的来源: https://android.googlesource.com/platform/frameworks/support/+/d573775216408a88e796cd74abf8ab018488c2a3/v7/vectordrawable/src/android/support/v7/graphics/drawable
我认为问题是
android:src="@drawable/mypic"
在您的 imageView 设置中。
改成
app:srcCompat="@drawable/mypic"
那么你应该可以开始了。
更多详情请参考: https://medium.com/@chrisbanes/appcompat-v23-2-age-of-the-vectors-91cbafa87c88#.mvuq06x1k