2015-10-21 259 views
0

我有一個XML繪製這樣的:XML drawables是否支持主題屬性?

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_pressed="false"> 
     <bitmap android:gravity="center" android:src="?attr/img_chat_sendbar_more"></bitmap> 
    </item> 
    <item android:state_pressed="true"> 
     <layer-list> 
      <item> 
       <shape> 
        <solid android:color="?attr/color_transparent_icon"></solid> 
       </shape> 
      </item> 
      <item> 
       <bitmap android:gravity="center" android:src="?attr/img_chat_sendbar_more"></bitmap> 
      </item> 
     </layer-list> 
    </item> 
</selector> 

在此繪製我使用的主題屬性「img_chat_sendbar_more」,其定義是這樣的:

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

,並在主題中使用,如:

<item name="img_chat_sendbar_more">@mipmap/chat_sendbar_more</item> 

但是,當應用程序運行它崩潰,並輸出'錯誤膨脹類'錯誤 如:

Caused by: android.content.res.Resources$NotFoundException: File res/drawable/chat_sendbar_ok.xml from drawable resource ID #0x7f020045 
      at android.content.res.Resources.loadDrawable(Resources.java:2091) 
      at android.content.res.TypedArray.getDrawable(TypedArray.java:601) 
      at android.view.View.<init>(View.java:3364) 
      at android.widget.TextView.<init>(TextView.java:619) 
      at android.widget.Button.<init>(Button.java:107) 
      at android.support.v7.widget.AppCompatButton.<init>(AppCompatButton.java:63) 
      at android.support.v7.widget.AppCompatButton.<init>(AppCompatButton.java:59) 
      at android.support.v7.internal.app.AppCompatViewInflater.createView(AppCompatViewInflater.java:101) 
      at android.support.v7.app.AppCompatDelegateImplV7.createView(AppCompatDelegateImplV7.java:802) 
      at android.support.v7.app.AppCompatDelegateImplV7.onCreateView(AppCompatDelegateImplV7.java:832) 
      at android.support.v4.view.LayoutInflaterCompatHC$FactoryWrapperHC.onCreateView(LayoutInflaterCompatHC.java:44) 
      at android.view.LayoutInflater$FactoryMerger.onCreateView(LayoutInflater.java:172) 
      at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:684) 
            at android.view.LayoutInflater.rInflate(LayoutInflater.java:755) 
            at android.view.LayoutInflater.rInflate(LayoutInflater.java:758) 
            at android.view.LayoutInflater.inflate(LayoutInflater.java:492) 
            at android.view.LayoutInflater.inflate(LayoutInflater.java:397) 
            at pj.mobile.app.wewe.view.communication.Fragment_Chat.onCreateView(Fragment_Chat.java:106) 
            at android.support.v4.app.Fragment.performCreateView(Fragment.java:1965) 
            at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1078) 
            at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1259) 
            at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:738) 
            at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1624) 
            at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:517) 
            at android.os.Handler.handleCallback(Handler.java:730) 
            at android.os.Handler.dispatchMessage(Handler.java:92) 
            at android.os.Looper.loop(Looper.java:137) 
            at android.app.ActivityThread.main(ActivityThread.java:5136) 
            at java.lang.reflect.Method.invokeNative(Native Method) 
            at java.lang.reflect.Method.invoke(Method.java:525) 
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737) 
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
            at dalvik.system.NativeStart.main(Native Method) 
    Caused by: org.xmlpull.v1.XmlPullParserException: Binary XML file line #4: <bitmap> requires a valid src attribute 
      at android.graphics.drawable.BitmapDrawable.inflate(BitmapDrawable.java:490) 
      at android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:901) 
      at android.graphics.drawable.StateListDrawable.inflate(StateListDrawable.java:183) 
      at android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:901) 
      at android.graphics.drawable.Drawable.createFromXml(Drawable.java:837) 
      at android.content.res.Resources.loadDrawable(Resources.java:2087) 
            at android.content.res.TypedArray.getDrawable(TypedArray.java:601) 
            at android.view.View.<init>(View.java:3364) 
            at android.widget.TextView.<init>(TextView.java:619) 
            at android.widget.Button.<init>(Button.java:107) 
            at android.support.v7.widget.AppCompatButton.<init>(AppCompatButton.java:63) 
            at android.support.v7.widget.AppCompatButton.<init>(AppCompatButton.java:59) 
            at android.support.v7.internal.app.AppCompatViewInflater.createView(AppCompatViewInflater.java:101) 
            at android.support.v7.app.AppCompatDelegateImplV7.createView(AppCompatDelegateImplV7.java:802) 
            at android.support.v7.app.AppCompatDelegateImplV7.onCreateView(AppCompatDelegateImplV7.java:832) 
            at android.support.v4.view.LayoutInflaterCompatHC$FactoryWrapperHC.onCreateView(LayoutInflaterCompatHC.java:44) 
            at android.view.LayoutInflater$FactoryMerger.onCreateView(LayoutInflater.java:172) 
            at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:684) 
            at android.view.LayoutInflater.rInflate(LayoutInflater.java:755) 
            at android.view.LayoutInflater.rInflate(LayoutInflater.java:758) 
            at android.view.LayoutInflater.inflate(LayoutInflater.java:492) 
            at android.view.LayoutInflater.inflate(LayoutInflater.java:397) 
            at pj.mobile.app.wewe.view.communication.Fragment_Chat.onCreateView(Fragment_Chat.java:106) 
            at android.support.v4.app.Fragment.performCreateView(Fragment.java:1965) 
            at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1078) 
            at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1259) 
            at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:738) 
            at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1624) 
            at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:517) 
            at android.os.Handler.handleCallback(Handler.java:730) 
            at android.os.Handler.dispatchMessage(Handler.java:92) 
            at android.os.Looper.loop(Looper.java:137) 
            at android.app.ActivityThread.main(ActivityThread.java:5136) 
            at java.lang.reflect.Method.invokeNative(Native Method) 
            at java.lang.reflect.Method.invoke(Method.java:525) 
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737) 
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
            at dalvik.system.NativeStart.main(Native Method) 

但是,當我直接使用drawable資源而不是主題屬性時,它運行OK。那麼我有一個XML drawable支持主題屬性的問題嗎?

回答

0

styles.xml或「主題功能」旨在自定義Android小部件/視圖的外觀,例如:TextView,EditViewRecyclerView等。 另一方面,可繪製的XML是可繪製的資源(就像png)而不是視圖。 換句話說:

沒有,繪製XML不能使用styles.xml像其他 Android的意見,因爲它是一個資源主題。

+1

感謝您的回答!剛纔我發現它在Android 5.0中運行良好,但在4.4中崩潰......所以我認爲這是因爲Android版本? –

相關問題