2017-02-14 106 views
2

我正在为Vector Drawable开发一个简单的例子。我使用向后兼容库com.android.support:appcompat-v7:25.1.1来支持前棒棒糖设备。错误膨胀类android.support.v7.widget.AppCompatTextView

在布局中使用的观点是:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    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:id="@+id/activity_main" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context="com.nm.vectordrawableexample.VectorActivity"> 

    <ImageView android:id="@+id/ic_logo" 
     android:layout_width="150dp" 
     android:layout_height="150dp" 
     android:layout_gravity="center_horizontal" 
     android:layout_marginBottom="30dp" 
     android:layout_marginTop="30dp" 
     app:srcCompat="@drawable/ic_light_bulb" /> 

    <TextView 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_marginBottom="10dp" 
     android:gravity="center_horizontal" 
     android:text="Tap on icon to change tint color" /> 

    <android.support.v7.widget.AppCompatImageView 
     android:id="@+id/ic_android" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center_horizontal" 
     android:layout_marginBottom="30dp" /> 

    <android.support.v7.widget.AppCompatTextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center_horizontal" 
     android:layout_marginBottom="20dp" 
     android:drawableLeft="@drawable/ic_flight_takeoff" 
     android:gravity="center_horizontal" 
     android:text="TextView with Vector Drawable" /> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center_horizontal" 
     android:text="Radio button with vector drawable icons" /> 

    <RadioGroup 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:showDividers="middle" 
     android:orientation="horizontal" 
     android:gravity="center"> 

     <android.support.v7.widget.AppCompatRadioButton 
      android:id="@+id/radioBtn" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_margin="10dp" 
      android:background="@drawable/radio_selector" 
      android:button="@android:color/transparent" /> 

     <android.support.v7.widget.AppCompatRadioButton 
      android:id="@+id/radioBtn2" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_margin="10dp" 
      android:background="@drawable/radio_selector" 
      android:button="@android:color/transparent" /> 

     <android.support.v7.widget.AppCompatRadioButton 
      android:id="@+id/radioBtn3" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_margin="10dp" 
      android:background="@drawable/radio_selector" 
      android:button="@android:color/transparent" /> 

     <android.support.v7.widget.AppCompatRadioButton 
      android:id="@+id/radioBtn4" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_margin="10dp" 
      android:background="@drawable/radio_selector" 
      android:button="@android:color/transparent" /> 

     <android.support.v7.widget.AppCompatRadioButton 
      android:id="@+id/radioBtn5" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_margin="10dp" 
      android:background="@drawable/radio_selector" 
      android:button="@android:color/transparent" /> 

    </RadioGroup> 

</LinearLayout> 

这里是其上在ImageView的点击改变图像中的ImageView使用的颜色的活性的代码片断:

public class VectorActivity extends AppCompatActivity { 

    static { 
     AppCompatDelegate.setCompatVectorFromResourcesEnabled(true); 
    } 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_vector); 
     final AppCompatImageView icAndroid= (AppCompatImageView) findViewById(R.id.ic_android); 
     icAndroid.setImageResource(R.drawable.ic_android); 
     icAndroid.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Random random=new Random(); 
       int color= Color.argb(255,random.nextInt(256),random.nextInt(256),random.nextInt(256)); 
       icAndroid.setColorFilter(color); 
      } 
     }); 
    } 
} 

这里是样式文件内容描述:

<resources> 

    <!-- Base application theme. --> 
    <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> 
     <!-- Customize your theme here. --> 
     <item name="colorPrimary">@color/colorPrimary</item> 
     <item name="colorPrimaryDark">@color/colorPrimaryDark</item> 
     <item name="colorAccent">@color/colorAccent</item> 
    </style> 

</resources> 

,而现在的问题在Android 5.0+(设备描述如下)设备上执行示例

  • 华硕Zenfone Max(Android版本6.0)。

  • GenyMotion仿真器(三星Galaxy S7的Android版本6.0 API 23)

示例成功执行和显示结果也。 但是,尽管执行该设备上的同一个例子:

  • GenyMotion模拟器HTC一个4.4.4 API 19(480dpi)

它显示了一个运行时异常和应用程序停止。

FATAL EXCEPTION: main 
Process: com.nm.vectordrawableexample, PID: 1351 
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.nm.vectordrawableexample/com.nm.vectordrawableexample.VectorActivity}: android.view.InflateException: Binary XML file line #38: Error inflating class android.support.v7.widget.AppCompatTextView 
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2184) 
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2233) 
    at android.app.ActivityThread.access$800(ActivityThread.java:135) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196) 
    at android.os.Handler.dispatchMessage(Handler.java:102) 
    at android.os.Looper.loop(Looper.java:136) 
    at android.app.ActivityThread.main(ActivityThread.java:5001) 
    at java.lang.reflect.Method.invokeNative(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:515) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601) 
    at dalvik.system.NativeStart.main(Native Method) 
    Caused by: android.view.InflateException: Binary XML file line #38: Error inflating class android.support.v7.widget.AppCompatTextView 
    at android.view.LayoutInflater.createView(LayoutInflater.java:620) 
    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:696) 
    at android.view.LayoutInflater.rInflate(LayoutInflater.java:755) 
    at android.view.LayoutInflater.inflate(LayoutInflater.java:492) 
    at android.view.LayoutInflater.inflate(LayoutInflater.java:397) 
    at android.view.LayoutInflater.inflate(LayoutInflater.java:353) 
    at android.support.v7.app.AppCompatDelegateImplV9.setContentView(AppCompatDelegateImplV9.java:288) 
    at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:140) 
    at com.nm.vectordrawableexample.VectorActivity.onCreate(VectorActivity.java:21) 
    at android.app.Activity.performCreate(Activity.java:5231) 
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087) 
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2148) 
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2233)  
    at android.app.ActivityThread.access$800(ActivityThread.java:135)  
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)  
    at android.os.Handler.dispatchMessage(Handler.java:102)  
    at android.os.Looper.loop(Looper.java:136)  
    at android.app.ActivityThread.main(ActivityThread.java:5001)  
    at java.lang.reflect.Method.invokeNative(Native Method)  
    at java.lang.reflect.Method.invoke(Method.java:515)  
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)  
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)  
    at dalvik.system.NativeStart.main(Native Method)  
    Caused by: java.lang.reflect.InvocationTargetException 
    at java.lang.reflect.Constructor.constructNative(Native Method) 
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423) 
    at android.view.LayoutInflater.createView(LayoutInflater.java:594) 
    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:696)  
    at android.view.LayoutInflater.rInflate(LayoutInflater.java:755)  
    at android.view.LayoutInflater.inflate(LayoutInflater.java:492)  
    at android.view.LayoutInflater.inflate(LayoutInflater.java:397)  
    at android.view.LayoutInflater.inflate(LayoutInflater.java:353)  
    at android.support.v7.app.AppCompatDelegateImplV9.setContentView(AppCompatDelegateImplV9.java:288)  
    at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:140)  
    at com.nm.vectordrawableexample.VectorActivity.onCreate(VectorActivity.java:21)  
    at android.app.Activity.performCreate(Activity.java:5231)  
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)  
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2148)  
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2233)  
    at android.app.ActivityThread.access$800(ActivityThread.java:135)  
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)  
    at android.os.Handler.dispatchMessage(Handler.java:102)  
    at android.os.Looper.loop(Looper.java:136)  
    at android.app.ActivityThread.main(ActivityThread.java:5001)  
    at java.lang.reflect.Method.invokeNative(Native Method)  
    at java.lang.reflect.Method.invoke(Method.java:515)  
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)  
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)  
    at dalvik.system.NativeStart.main(Native Method)  
    Caused by: android.content.res.Resources$NotFoundException: File res/drawable/ic_flight_takeoff.xml from drawable resource ID #0x7f020055 
    at android.content.res.Resources.loadDrawable(Resources.java:2096) 
    at android.content.res.TypedArray.getDrawable(TypedArray.java:602) 
    at android.widget.TextView.<init>(TextView.java:806) 
    at android.support.v7.widget.AppCompatTextView.<init>(AppCompatTextView.java:62) 
    at android.support.v7.widget.AppCompatTextView.<init>(AppCompatTextView.java:58) 
    at java.lang.reflect.Constructor.constructNative(Native Method)  
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423)  
    at android.view.LayoutInflater.createView(LayoutInflater.java:594)  
    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:696)  
    at android.view.LayoutInflater.rInflate(LayoutInflater.java:755)  
    at android.view.LayoutInflater.inflate(LayoutInflater.java:492)  
    at android.view.LayoutInflater.inflate(LayoutInflater.java:397)  
    at android.view.LayoutInflater.inflate(LayoutInflater.java:353)  
    at android.support.v7.app.AppCompatDelegateImplV9.setContentView(AppCompatDelegateImplV9.java:288)  
    at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:140)  
    at com.nm.vectordrawableexample.VectorActivity.onCreate(VectorActivity.java:21)  
    at android.app.Activity.performCreate(Activity.java:5231)  
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)  
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2148)  
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2233)  
    at android.app.ActivityThread.access$800(ActivityThread.java:135)  
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)  
    at android.os.Handler.dispatchMessage(Handler.java:102)  
    at android.os.Looper.loop(Looper.java:136)  
    at android.app.ActivityThread.main(ActivityThread.java:5001)  
    at java.lang.reflect.Method.invokeNative(Native Method)  
    at java.lang.reflect.Method.invoke(Method.java:515)  
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)  
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)  
    at dalvik.system.NativeStart.main(Native Method)  
    Caused by: org.xmlpull.v1.XmlPullParserException: Binary XML file line #1: invalid drawable tag vector 
    at android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:933) 
    at android.graphics.drawable.Drawable.createFromXml(Drawable.java:877) 
    at android.content.res.Resources.loadDrawable(Resources.java:2092) 
    at android.content.res.TypedArray.getDrawable(TypedArray.java:602)  
    at android.widget.TextView.<init>(TextView.java:806)  
    at android.support.v7.widget.AppCompatTextView.<init>(AppCompatTextView.java:62)  
    at android.support.v7.widget.AppCompatTextView.<init>(AppCompatTextView.java:58)  
    at java.lang.reflect.Constructor.constructNative(Native Method)  
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423)  
    at android.view.LayoutInflater.createView(LayoutInflater.java:594)  
    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:696)  
    at android.view.LayoutInflater.rInflate(LayoutInflater.java:755)  
    at android.view.LayoutInflater.inflate(LayoutInflater.java:492)  
    at android.view.LayoutInflater.inflate(LayoutInflater.java:397)  
    at android.view.LayoutInflater.inflate(LayoutInflater.java:353)  
    at android.support.v7.app.AppCompatDelegateImplV9.setContentView(AppCompatDelegateImplV9.java:288)  
    at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:140)  
    at com.nm.vectordrawableexample.VectorActivity.onCreate(VectorActivity.java:21)  
    at android.app.Activity.performCreate(Activity.java:5231)  
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)  
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2148)  
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2233)  
    at android.app.ActivityThread.access$800(ActivityThread.java:135)  
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)  
    at android.os.Handler.dispatchMessage(Handler.java:102)  
    at android.os.Looper.loop(Looper.java:136)  
    at android.app.ActivityThread.main(ActivityThread.java:5001)  
    at java.lang.reflect.Method.invokeNative(Native Method)  
    at java.lang.reflect.Method.invoke(Method.java:515)  
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)  
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)  
    at dalvik.system.NativeStart.main(Native Method)  

应用程序/文件的build.gradle内容描述

apply plugin: 'com.android.application' 

android { 
    compileSdkVersion 25 
    buildToolsVersion "25.0.2" 
    defaultConfig { 
     applicationId "com.nm.vectordrawableexample" 
     minSdkVersion 15 
     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' 
     } 
    } 
} 

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' 
    }) 
    compile 'com.android.support:appcompat-v7:25.1.1' 
    testCompile 'junit:junit:4.12' 
} 

什么节中的代码在哪里呢?成功运行示例需要进行哪些更改?

+0

请上传应用程序/的build.gradle以及 – Pehlaj

+0

尝试使用的gradle这个:''编译 “com.android.support:appcompat-v7:21.0 +。” – rafsanahmad007

+0

对不起,在Nexus 5上运行时没有发现任何问题(Android 6.0.1) –

回答

0

看起来像老问题,所以作者可能不会等待答案。但问题出在res/drawable/ic_flight_takeoff.xml文件中。

这是一个可绘制的矢量,你在你的build.gradle vectorDrawables.useSupportLibrary = true中设置。

我这种情况下,矢量绘制将不会转换为PNG并照原样使用,所以它会导致Android 5.0以前的版本(LOLLIPOP)崩溃。

0

以下行添加到您的活动

static { 
     AppCompatDelegate.setCompatVectorFromResourcesEnabled(true); 
    } 
相关问题