2012-03-07 34 views
6

Đây là crashlog từ Android Market:Android UnsupportedOperationException: Không thể chuyển đổi màu sắc: type = 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 

Vì vậy, cho những gì tôi có thể thấy vấn đề là ở

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

Nơi tôi có dòng mã này:

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

Đây là chức năng đầy đủ

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); 
    } 

Đây là nội dung của 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> 

Tôi nghĩ rằng vấn đề là trong TextView. Phong cách của chế độ xem văn bản đó không thể là vấn đề vì trực tiếp xuất phát từ Android nên tôi không nghĩ đây là vấn đề.

Các android: Format = "@ màu/orange_mxm" là này trong colors.xml tôi

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

Đây là Dialog.MXM phong cách

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

Và tôi không nghĩ rằng đây là màu không chuẩn ...

Sự cố ở đâu? Làm sao tôi có thể giải quyết việc này?

+0

Đăng phong cách xml của bạn cho Dialog.MXM. – adamp

+0

MinSdkVersion của bạn là gì? – adamp

+0

MinSdkVersion của tôi là 7 (android 2.1) – StErMi

Trả lời

11

Kiểu Dialog.MXM có thay đổi theo cấp API được thiết bị hỗ trợ (ví dụ: sử dụng giá trị-v14/thư mục) hay được sử dụng cho tất cả các thiết bị?

Dòng chủ đề DeviceDefault (bao gồm Theme.DeviceDefault.Dialog) đã được thêm vào API 14 (Android 4.0, ICS) và sẽ không xuất hiện trên các thiết bị cũ hơn. Điều này có nghĩa là trên những thiết bị không thể tìm thấy chủ đề đó, Dialog.MXM có hiệu lực có một chủ đề cha mẹ trống. Chủ đề mong đợi một số thuộc tính để có giá trị được xác định và trong trường hợp này, chủ đề của bạn sẽ bị thiếu nhiều thuộc tính bắt buộc. Một số thiết bị có thể xử lý điều này một cách duyên dáng hơn những thiết bị khác.

Một giải pháp là xác định chủ đề cơ bản chung được kế thừa từ một phụ huynh khác dựa trên phiên bản nền tảng mà thiết bị đang chạy. Một ví dụ:

res/values ​​/ 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/values-v11/themes.xml:

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

res/values-v14/themes.xml:

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

Tôi đã gặp lỗi này ở một trong các mô-đun của mình. Đây là mô tả sự cố:

có một mục màu cho màu 'trắng' được xác định trong colors.xml của mô-đun ứng dụng chính.

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

Và trong một trong những bố trí trong mô-đun của tôi, tôi đề cập đến màu trắng như:

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

Sai lầm tôi đã làm được tôi đã xác định màu sắc mục 'trắng' một lần nữa trong color.xml mô-đun của tôi như

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

Thay vào đó lẽ ra đã như

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

Đó là vấn đề của tôi.

Xin cảm ơn, Rakesh

0

Tôi nhận ngoại lệ này, nhưng vì một lý do khác. Tôi đã cố gắng tham chiếu thuộc tính tùy chỉnh từ một công cụ chọn có thể kéo được. Đây là sự cố đã biết trên các thiết bị trước Lollipop như được giải thích herehere.

Trong trường hợp bất kỳ ai cần làm điều đó (và giữ tính tương thích ngược), một cách giải quyết là chuyển đổi chủ đề, xác định một đối tượng riêng biệt cho từng chủ đề và tạo thuộc tính tùy chỉnh cho drawable trong attrs.xml. Một ví dụ được đưa ra trong câu trả lời được chấp nhận trong liên kết đầu tiên ở trên.

Đó là xấu xí như địa ngục, nhưng nếu có ai có đề xuất tốt hơn, tôi sẽ rất vui khi "nghe" chúng.

+0

hey @ M.Paunov bạn có tìm thấy giải pháp hay giải pháp dễ dàng nào không? –

+0

Không có gì mới, tôi chỉ sử dụng giải pháp này: http://stackoverflow.com/a/13471695/1934673 –

Các vấn đề liên quan