Sto costruendo la mia app in modo che possa beneficiare di più temi.Creazione di un'app personalizzata per arresti anomali dello stile
Sono arrivato allo stadio in cui desidero aggiungere elementi personalizzati, ad es.
<style name="My.Theme.Default">
...
<item name="borderColorDialog">@color/red</item>
...
</style>
<style name="My.Theme.Blue">
...
<item name="borderColorDialog">@color/blue</item>
...
</style>
Così ho aggiunto l'attributo borderColorDialog
al mio file attr come segue:
<attr name="borderColorDialog" format="color" />
Ora voglio provarlo. Ho un disegnabile come segue:
<?xml version="1.0" encoding="utf-8"?>
<layer-list
xmlns:android="http://schemas.android.com/apk/res/android" >
<item>
<shape
android:shape="rectangle" >
<solid
android:color="?borderColorDialog" />
</shape>
</item>
<item
android:bottom="2dp">
<shape
android:shape="rectangle" >
<solid
android:color="@color/black" />
</shape>
</item>
</layer-list>
Tutto questo appare logicamente suonerà per me, tuttavia il riferimento ?borderColorDialog
blocca l'emulatore:
E/AndroidRuntime(1461): FATAL EXCEPTION: main
E/AndroidRuntime(1461): java.lang.RuntimeException: Unable to start activity ComponentInfo{.MainActivity}: android.view.InflateException: Binary XML file line #26: Error inflating class com.android.internal.widget.ActionBarContainer
E/AndroidRuntime(1461): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2059)
E/AndroidRuntime(1461): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)
E/AndroidRuntime(1461): at android.app.ActivityThread.access$600(ActivityThread.java:130)
E/AndroidRuntime(1461): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195)
E/AndroidRuntime(1461): at android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime(1461): at android.os.Looper.loop(Looper.java:137)
E/AndroidRuntime(1461): at android.app.ActivityThread.main(ActivityThread.java:4745)
E/AndroidRuntime(1461): at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime(1461): at java.lang.reflect.Method.invoke(Method.java:511)
E/AndroidRuntime(1461): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
E/AndroidRuntime(1461): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
E/AndroidRuntime(1461): at dalvik.system.NativeStart.main(Native Method)
E/AndroidRuntime(1461): Caused by: android.view.InflateException: Binary XML file line #26: Error inflating class com.android.internal.widget.ActionBarContainer
E/AndroidRuntime(1461): at android.view.LayoutInflater.createView(LayoutInflater.java:613)
E/AndroidRuntime(1461): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:687)
E/AndroidRuntime(1461): at android.view.LayoutInflater.rInflate(LayoutInflater.java:746)
E/AndroidRuntime(1461): at android.view.LayoutInflater.inflate(LayoutInflater.java:489)
E/AndroidRuntime(1461): at android.view.LayoutInflater.inflate(LayoutInflater.java:396)
E/AndroidRuntime(1461): at android.view.LayoutInflater.inflate(LayoutInflater.java:352)
E/AndroidRuntime(1461): at com.android.internal.policy.impl.PhoneWindow.generateLayout(PhoneWindow.java:2784)
E/AndroidRuntime(1461): at com.android.internal.policy.impl.PhoneWindow.installDecor(PhoneWindow.java:2844)
E/AndroidRuntime(1461): at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:252)
E/AndroidRuntime(1461): at android.app.Activity.setContentView(Activity.java:1867)
E/AndroidRuntime(1461): at .MainActivity.onCreate(MainActivity.java:30)
E/AndroidRuntime(1461): at android.app.Activity.performCreate(Activity.java:5008)
E/AndroidRuntime(1461): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079)
E/AndroidRuntime(1461): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023)
E/AndroidRuntime(1461): ... 11 more
E/AndroidRuntime(1461): Caused by: java.lang.reflect.InvocationTargetException
E/AndroidRuntime(1461): at java.lang.reflect.Constructor.constructNative(Native Method)
E/AndroidRuntime(1461): at java.lang.reflect.Constructor.newInstance(Constructor.java:417)
E/AndroidRuntime(1461): at android.view.LayoutInflater.createView(LayoutInflater.java:587)
E/AndroidRuntime(1461): ... 24 more
E/AndroidRuntime(1461): Caused by: android.content.res.Resources$NotFoundException: File res/drawable/actionbar_background.xml from drawable resource ID #0x7f020001
E/AndroidRuntime(1461): at android.content.res.Resources.loadDrawable(Resources.java:1918)
E/AndroidRuntime(1461): at android.content.res.TypedArray.getDrawable(TypedArray.java:601)
E/AndroidRuntime(1461): at android.view.View.<init>(View.java:3336)
E/AndroidRuntime(1461): at android.view.ViewGroup.<init>(ViewGroup.java:427)
E/AndroidRuntime(1461): at android.widget.FrameLayout.<init>(FrameLayout.java:101)
E/AndroidRuntime(1461): at android.widget.FrameLayout.<init>(FrameLayout.java:97)
E/AndroidRuntime(1461): at com.android.internal.widget.ActionBarContainer.<init>(ActionBarContainer.java:52)
E/AndroidRuntime(1461): ... 27 more
E/AndroidRuntime(1461): Caused by: java.lang.UnsupportedOperationException: Can't convert to color: type=0x2
E/AndroidRuntime(1461): at android.content.res.TypedArray.getColor(TypedArray.java:326)
E/AndroidRuntime(1461): at android.graphics.drawable.GradientDrawable.inflate(GradientDrawable.java:951)
E/AndroidRuntime(1461): at android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:881)
E/AndroidRuntime(1461): at android.graphics.drawable.LayerDrawable.inflate(LayerDrawable.java:165)
E/AndroidRuntime(1461): at android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:881)
E/AndroidRuntime(1461): at android.graphics.drawable.Drawable.createFromXml(Drawable.java:818)
E/AndroidRuntime(1461): at android.content.res.Resources.loadDrawable(Resources.java:1915)
E/AndroidRuntime(1461): ... 33 more
L'errore va avanti e avanti. Fondamentalmente riferimento all'XML.
Il ritorno a @color/red
funziona correttamente.
Come posso risolvere questo?
si può mostrare l'intero errore? Solo quel componente non è abbastanza. – Eric
@Eric Che ne pensi di questo. – HGPB
Mmmh ... sì, non sono sicuro che questo possa essere fatto nel modo desiderato. Voglio dire, puoi impostare una risorsa colore invece di un attributo, ma non è ottimale per i temi. Potresti provare a farlo [tramite codice] (http://stackoverflow.com/questions/7896615/android-how-to-get-value-of-an-attribute-in-code), ma non sei l'unico uno per avere questo problema ([1] (http://stackoverflow.com/questions/8041537/how-to-reference-style-attributes-from-a-drawable), [2] (http://stackoverflow.com)/questions/7529574/how-to-reference-from-drawable-to-style)) ... quindi penso che questa sia solo una limitazione del sistema operativo Android. – Eric