2016-10-19 2 views
0

24.2.1 및 배경 테마 참조 충돌하는 다소 않습니다 이런 식으로 뭔가 :안드로이드 사전 L, APPCOMPAT-V7 : 난 그냥 예전의 코드를 상속

(이름 변경)

<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 :

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

<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> 

그리고 레이아웃의 조각이 17,451,515,

트릭은 스타일 (이것은 사용자로 변경해야합니다 버튼을 클릭) 프로그램로드이다 (이것은 5.0에서 잘 작동)

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

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

이 마지막보기를 팽창 아래 안드로이드 4.4에 예외가 발생

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, version 18 (또는 이와 비슷한)에서 잘 작동하지만 이전 라이브러리를 유지할 수있는 옵션이 아닙니다. (L-L 버전 이전에는 지원을 취소 할 수 없습니다 ...)

이 간단한 수정 (애플 리케이션의 절반을 다시 작성 포함)?

답변

0

좋아, 그래서 뒷조사 후, 나는 해결책을 발견했습니다 : 뷰가 팽창되기 전에

방금 ​​테마를 설정해야합니다을 :

activity.setTheme(themeId); 
관련 문제