2016-10-19 36 views
0

我刚刚继承了旧的代码,这或多或少做这样的事情:Android的预L,程序兼容性-V7:24.2.1和背景主题参考崩溃

(名称变更)

<attr name="my_reference" format="reference"/> 

    <style name="my_style_a" parent="@style/AppTheme"> 
    <item name="my_reference">@drawable/drawable_a</item> 
    </style> 

    <style name="my_style_b" parent="@style/AppTheme"> 
    <item name="my_reference">@drawable/drawable_b</item> 
    </style> 

drawable_a和drawable_b:

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

    <item android:state_pressed="true"> 
     <shape android:shape="rectangle"> 
      <solid android:color="#ff000000" /> 
     </shape> 
    </item> 

</selector> 

然后还有一块布局的:

 <ImageView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:background="?my_reference" 
      android:src="@drawable/image" /> 

诀窍是,风格是装载程序(它也必须改变用户点击一个按钮):

ContextThemeWrapper contextThemeWrapper = new ContextThemeWrapper(context, themeId); 
    LayoutInflater inflater = LayoutInflater.from(contextThemeWrapper); 

    View view = inflater.inflate(R.layout.activity_layout, parent, false); 

充气去年视图抛出异常,在Android 4.4及以下(正常工作在5.0+)

Caused by: android.content.res.Resources$NotFoundException: Resource is not a Drawable (color or path): TypedValue{t=0x2/d=0x7f010010 a=-1} 
    at android.content.res.Resources.loadDrawable(Resources.java:1967) 
    at android.content.res.TypedArray.getDrawable(TypedArray.java:601) 
    at android.view.View.<init>(View.java:3337) 
    at android.widget.ImageView.<init>(ImageView.java:114) 
    at android.support.v7.widget.AppCompatImageView.<init>(AppCompatImageView.java:57) 
    at android.support.v7.widget.AppCompatImageView.<init>(AppCompatImageView.java:53) 
    at android.support.v7.app.AppCompatViewInflater.createView(AppCompatViewInflater.java:106) 
    at android.support.v7.app.AppCompatDelegateImplV9.createView(AppCompatDelegateImplV9.java:1013) 
    at android.support.v7.app.AppCompatDelegateImplV9.onCreateView(AppCompatDelegateImplV9.java:1072) 
    at android.support.v4.view.LayoutInflaterCompatHC$FactoryWrapperHC.onCreateView(LayoutInflaterCompatHC.java:44) 
    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:675) 
    at android.view.LayoutInflater.rInflate(LayoutInflater.java:746)  
    at android.view.LayoutInflater.rInflate(LayoutInflater.java:749)  
    at android.view.LayoutInflater.inflate(LayoutInflater.java:489)  
    at android.view.LayoutInflater.inflate(LayoutInflater.java:396)  

它只发生在我更新com.android.support:appcompat-v7库到24+之后(因为我需要新的API)。它适用于appcompat-v7,版本18(或类似的东西),但它不是一个选择留在旧库(我也不能放弃支持前L Android版本...)

有没有这个简单的修复(不包括重写应用程序的一半)?

回答

0

好了,一些挖后,我已经找到了解决办法:

,你只需要设置一个主题前视图膨胀:

activity.setTheme(themeId);