2013-01-18 23 views
10

Tôi gặp sự cố sau. Tôi muốn tùy chỉnh sự xuất hiện của hàng trong một danh sách, nhưng ngoại lệ được ném trong quá trình lạm phát.Làm cách nào để tham chiếu thuộc tính chủ đề theo kiểu?

đoạn mã trong style.xml

<style name="AppTheme.Main">  
    <item name="item_shadowColor">#000000</item>   
</style> 
<style name="item_label">  
    <item name="android:shadowColor">?attr/item_shadowColor</item>   
</style> 

attr.xml

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <attr name="item_shadowColor" format="color" /> 
</resources> 

list_item.xml

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

    <TextView 
     android:id="@id/title" 
     style="@style/item_label" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent"/> 

</LinearLayout> 

Và ngoại trừ

FATAL EXCEPTION: main 
android.view.InflateException: Binary XML file line #7: Error inflating class <unknown> 
    at android.view.LayoutInflater.createView(LayoutInflater.java:606) 
    at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56) 
    at android.view.LayoutInflater.onCreateView(LayoutInflater.java:653) 
    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:678) 
    at android.view.LayoutInflater.rInflate(LayoutInflater.java:739) 
    at android.view.LayoutInflater.inflate(LayoutInflater.java:489) 
    at android.view.LayoutInflater.inflate(LayoutInflater.java:396) 
    at ru.mts.goodok.adapter.CategoryListAdapter.getView(CategoryListAdapter.java:30) 
    at android.widget.AbsListView.obtainView(AbsListView.java:2052) 
    at android.widget.ListView.makeAndAddView(ListView.java:1820) 
    at android.widget.ListView.fillDown(ListView.java:672) 
    at android.widget.ListView.fillFromTop(ListView.java:732) 
    at android.widget.ListView.layoutChildren(ListView.java:1673) 
    at android.widget.AbsListView.onLayout(AbsListView.java:1882) 
    at android.view.View.layout(View.java:11425) 
    at android.view.ViewGroup.layout(ViewGroup.java:4232) 
    at android.widget.RelativeLayout.onLayout(RelativeLayout.java:925) 
    at android.view.View.layout(View.java:11425) 
    at android.view.ViewGroup.layout(ViewGroup.java:4232) 
    at android.widget.FrameLayout.onLayout(FrameLayout.java:431) 
    at android.view.View.layout(View.java:11425) 
    at android.view.ViewGroup.layout(ViewGroup.java:4232) 
    at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1628) 
    at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1486) 
    at android.widget.LinearLayout.onLayout(LinearLayout.java:1399) 
    at android.view.View.layout(View.java:11425) 
    at android.view.ViewGroup.layout(ViewGroup.java:4232) 
    at android.widget.FrameLayout.onLayout(FrameLayout.java:431) 
    at android.view.View.layout(View.java:11425) 
    at android.view.ViewGroup.layout(ViewGroup.java:4232) 
    at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1516) 
    at android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2505) 
    at android.os.Handler.dispatchMessage(Handler.java:99) 
    at android.os.Looper.loop(Looper.java:154) 
    at android.app.ActivityThread.main(ActivityThread.java:4945) 
    at java.lang.reflect.Method.invokeNative(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:511) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
    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:417) 
    at android.view.LayoutInflater.createView(LayoutInflater.java:586) 
    ... 39 more 
Caused by: java.lang.NumberFormatException: Invalid int: "?2130771972" 
    at java.lang.Integer.invalidInt(Integer.java:138) 
    at java.lang.Integer.parse(Integer.java:375) 
    at java.lang.Integer.parseInt(Integer.java:366) 
    at com.android.internal.util.XmlUtils.convertValueToInt(XmlUtils.java:123) 
    at android.content.res.TypedArray.getInt(TypedArray.java:254) 
    at android.widget.TextView.<init>(TextView.java:829) 
    at android.widget.TextView.<init>(TextView.java:489) 
    ... 42 more 

Tôi đang làm gì sai và làm thế nào tôi có thể giải quyết vấn đề này?

+0

? Attr/item_shadowColor xóa màu này và tự tạo màu cho riêng bạn. –

+0

? Attr/item_shadowColor không thể xóa vì nó đặt màu cho các chủ đề khác nhau – Bracadabra

Trả lời

12

Vấn đề đã được giải quyết. Tôi đã sử dụng bối cảnh ứng dụng để tạo bộ điều hợp, khi tôi thay đổi ngữ cảnh thành hoạt động, sự cố đã biến mất.

+1

Cảm ơn bạn! Đây cũng là vấn đề của tôi. – Sadegh

4

Hãy thử tạo tệp themes.xml và thêm các dòng bên dưới vào trong đó.

Themes.xml

<style name="Theme"> 
    <item name="item_shadowColor">@style/item_label</item> 
</style> 

attrs.xml
Thay đổi các format="reference" trong tập tin attrs.xml của bạn.

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <attr name="item_shadowColor" format="reference" /> 
</resources> 

styles.xml

<style name="AppTheme.Main">  
    <item name="item_shadowColor">#000000</item>   
</style> 

<style name="item_label">  
    <item name="android:shadowColor">#F240FF</item>   
</style> 

Sau đó, sau khi xác định phong cách của bạn với TextView như sau:

<TextView 
    android:id="@id/title" 
    style="@style/item_label" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"/> 
Các vấn đề liên quan