2012-03-07 78 views
6

這是從Android Market的系統崩潰日誌:的Android UnsupportedOperationException異常:無法轉換爲彩色:類型= 0X2

android.view.InflateException: Binary XML file line #8: Error inflating class <unknown> 
at android.view.LayoutInflater.createView(LayoutInflater.java:596) 
at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56) 
at android.view.LayoutInflater.onCreateView(LayoutInflater.java:644) 
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:669) 
at android.view.LayoutInflater.rInflate(LayoutInflater.java:724) 
at android.view.LayoutInflater.inflate(LayoutInflater.java:479) 
at android.view.LayoutInflater.inflate(LayoutInflater.java:391) 
at android.view.LayoutInflater.inflate(LayoutInflater.java:347) 
at com.designfuture.music.ui.dialog.MXMDialog.<init>(MXMDialog.java:73) 
at com.designfuture.music.ui.dialog.MXMDialog.<init>(MXMDialog.java:58) 
at com.designfuture.music.model.MXMStoreBuy.getBuyDialog(MXMStoreBuy.java:70) 
at com.designfuture.music.ui.fragment.plbl.XLBLFragment$ViewHolder$3.onClick(XLBLFragment.java:290) 
at android.view.View.performClick(View.java:3110) 
at android.view.View$PerformClick.run(View.java:11934) 
at android.os.Handler.handleCallback(Handler.java:587) 
at android.os.Handler.dispatchMessage(Handler.java:92) 
at android.os.Looper.loop(Looper.java:132) 
at android.app.ActivityThread.main(ActivityThread.java:4123) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:491) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599) 
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:416) 
at android.view.LayoutInflater.createView(LayoutInflater.java:576) 
... 22 more 
Caused by: java.lang.UnsupportedOperationException: Can't convert to color: type=0x2 
at android.content.res.TypedArray.getColor(TypedArray.java:326) 
at android.widget.TextView.<init>(TextView.java:422) 
at android.widget.TextView.<init>(TextView.java:364) 
... 25 more 

所以對於我所看到的問題是在

at com.designfuture.music.ui.dialog.MXMDialog.<init>(MXMDialog.java:73) 

我在哪裏有這行代碼:

mHolder = new ViewHolder((ViewGroup) inflater.inflate(R.layout.dialog_mxm, null)); 

這是完整的功能

public MXMDialog(Context context, String title) { 
     super(context, R.style.Dialog_MXM); 

     //getWindow() 
     LayoutParams lp= getWindow().getAttributes(); 
     lp.gravity = Gravity.CENTER; 
     lp.dimAmount = 0.5f; 
     lp.flags = LayoutParams.FLAG_NOT_TOUCH_MODAL; 

     if(inflater == null) 
      inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

     mHolder = new ViewHolder((ViewGroup) inflater.inflate(R.layout.dialog_mxm, null)); 
     super.setContentView(mHolder.root); 

     if(title != null) 
      setTitle(title); 
    } 

這是的R.layout.dialog_mxm

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:orientation="vertical" > 

    <TextView 
     android:id="@android:id/title" 
     android:background="@drawable/tabwidget" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:padding="5dp" 
     android:gravity="left" 
     android:paddingLeft="10dp" 
     android:textStyle="bold" 
     android:textColor="@color/orange_mxm" 
     style="@android:style/TextAppearance.Large"/> 

    <FrameLayout 
     android:id="@android:id/content" 
     android:background="@drawable/tabwidget" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content"/> 

</LinearLayout> 

我認爲這個問題是在TextView的內容。 該textview的風格不能成爲一個問題,因爲直接來自Android,所以我不認爲這會是一個問題。

Android的:文字顏色= 「@顏色/ orange_mxm」 這是在我的colors.xml

<color name="orange_mxm">#FFff6500</color> 

這是Dialog.MXM風格

<!-- DIALOG --> 

    <style name="Dialog.MXM" parent="@android:style/Theme.DeviceDefault.Dialog"> 
     <item name="android:layout_width">wrap_content</item> 
     <item name="android:background">@android:color/transparent</item> 
     <item name="android:windowAnimationStyle">@style/Dialog.MXM.FadeAnimation</item> 
     <item name="android:windowIsFloating">true</item> 
     <item name="android:windowNoTitle">true</item> 
     <item name="android:gravity">center</item> 
    </style> 

    <style name="Dialog.MXM.FadeAnimation"> 
     <item name="android:windowEnterAnimation">@android:anim/fade_in</item> 
     <item name="android:windowExitAnimation">@android:anim/fade_out</item> 
    </style> 

而且我不認爲這是一種非標準的顏色...

問題在哪裏?我該如何解決這個問題?

+0

張貼Dialog.MXM你的風格的XML。 – adamp 2012-03-08 17:11:49

+0

你的minSdkVersion是什麼? – adamp 2012-03-09 05:13:03

+0

我的minSdkVersion是7(Android 2.1的) – StErMi 2012-03-12 15:09:09

回答

11

Dialog.MXM樣式是否隨設備支持的API級別而變化(例如,使用values-v14 /目錄)還是用於所有設備?

DeviceDefault主題系列(包括Theme.DeviceDefault.Dialog)已添加到API 14(Android 4.0,ICS)中,並且不會出現在較舊的設備上。這意味着在無法找到該主題的設備上,Dialog.MXM實際上具有空的父主題。主題期望一些屬性具有定義的值,在這種情況下,您的主題將會丟失許多必需的值。有些設備可能比其他設備更優雅地處理這個問題。

一種解決方案是根據設備運行的平臺版本來定義從不同父級繼承的公共基礎主題。一個例子:

RES /值/的themes.xml:

[...] 
<!-- Use the legacy dialog theme as a base on older devices --> 
<style name="Dialog.Base" parent="@android:style/Theme.Dialog" /> 

<!-- Dialog.Base varies with platform version --> 
<style name="Dialog.MXM" parent="@style/Dialog.Base"> 
    <item name="android:background">@android:color/transparent</item> 
    <item name="android:windowAnimationStyle">@style/Dialog.MXM.FadeAnimation</item> 
    <item name="android:windowIsFloating">true</item> 
    <item name="android:windowNoTitle">true</item> 
    <item name="android:gravity">center</item> 
</style> 
[...] 

RES /值-V11 /的themes.xml:

[...] 
<!-- Use Holo dialogs as the base on Honeycomb --> 
<style name="Dialog.Base" parent="@android:style/Theme.Holo.Dialog" /> 
[...] 

RES /值-V14 /的themes.xml:

[...] 
<!-- Use DeviceDefault dialogs as the base on ICS and newer --> 
<style name="Dialog.Base" parent="@android:style/Theme.DeviceDefault.Dialog" /> 
[...] 
1

我是在我的模塊中的一個出現此錯誤。以下是問題描述:

在主應用程序模塊的colors.xml中定義了'white'顏色的顏色項目。

<color name="white">#ffffff</color> 

而在我的模塊中的佈局之一,我指的是白顏色:

<TextView 
android:textColor="@color/white" 
.../> 

我做的錯誤是我曾經的「白」再定義的項目顏色我模塊的color.xml作爲

**<color name="white">@color/white</color>** 

相反,它應該是像

<color name="white">#ffffff</color>. 

這是我的問題。

感謝, 拉克什

0

我得到這個例外,但出於不同的原因。我試圖從選擇器drawable引用一個自定義屬性。這是棒棒糖預設備的已知問題的解釋herehere

如果任何人需要做的是(並保持向後兼容),一個解決方法是將切換主題,定義爲每個主題一個單獨的可繪製的,併爲在attrs.xml可提拉自定義屬性。 在上面的第一個鏈接中接受的答案中給出了一個示例。

這是醜陋的地獄,但如果任何人有更好的建議,我會很樂意去「聽」出來。

+0

哎@ M.Paunov你有沒有發現任何簡單的解決方案或解決方法嗎? – 2017-04-26 12:06:57

+0

沒有新的,我只是使用這個解決方案:http://stackoverflow.com/a/13471695/1934673 – 2017-04-26 14:58:12

相關問題