Estoy compilando mi aplicación para que pueda beneficiarse de múltiples temas.Creación de aplicaciones personalizadas de clics de estilo
Llegué al punto en el que deseo agregar elementos personalizados, p.
<style name="My.Theme.Default">
...
<item name="borderColorDialog">@color/red</item>
...
</style>
<style name="My.Theme.Blue">
...
<item name="borderColorDialog">@color/blue</item>
...
</style>
Así que hemos añadido el atributo borderColorDialog
a mi archivo attr de la siguiente manera:
<attr name="borderColorDialog" format="color" />
Ahora quiero probarlo. Tengo un estirable de la siguiente manera:
<?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>
Todo esto aparece lógicamente sonar a mí, sin embargo la referencia ?borderColorDialog
bloquea el emulador:
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
El error sigue y sigue. Básicamente se refiere al XML.
Volviendo a @color/red
funciona bien.
¿Cómo puedo solucionar esto?
puedo mostrar todo el error? Solo ese componente realmente no es suficiente. – Eric
@Eric ¿Qué tal eso? – HGPB
Mmmh ... sí, no estoy seguro de que esto pueda hacerse de la manera que desee. Quiero decir, puede configurar un recurso de color en lugar de un atributo, pero eso no es óptimo para los temas. Podrías intentar hacerlo [a través del código] (http://stackoverflow.com/questions/7896615/android-how-to-get-value-of-an-attribute-in-code), pero no eres el único uno para tener este 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)) ... así que estoy pensando que esto es solo una restricción del sistema operativo Android. – Eric