Autore Topic: Problema nell'applicare un attributo di tema ad una shape XML.  (Letto 736 volte)

Offline frigor

  • Nuovo arrivato
  • *
  • Post: 21
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    htc desire
  • Sistema operativo:
    windows xp e windows 7
Problema nell'applicare un attributo di tema ad una shape XML.
« il: 11 Agosto 2011, 16:31:35 CEST »
0
Salve a tutti.
Vi spiego il mio intento. Ho costruito dei pulsanti personalizzati con dei file xml. Per esempio "ilPulsante_01.xml"

Codice: [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <corners
        android:radius="@dimen/corner_radius" />
    <gradient
        android:angle="270"
        android:startColor="@color/almost_white"
        android:endColor="@color/somewhat_gray"
        android:type="linear" />
</shape>

Ho anche creato dei Temi personalizzati con degli attributi, per esempio, nel file "iTemi.xml":

Codice: [Seleziona]
<style name="TemaGenerale.01" parente="TemaGenerale">
      <item name="backGround_color">#FF000000</item>
</style>

Ho infine aggiunto gli Attributi al file "attr.xml":

Codice: [Seleziona]
<attr name="backGround_color" format="color" />
Adesso vorrei impostare un valore della shape del pulsante iniziale (il colore di fondo appunto) con il riferimento all'attributo del tema.
La riga :
Codice: [Seleziona]
android:startColor="@color/almost_white"Diventerebbe:
Codice: [Seleziona]
android:startColor="?backGround_color"
Invece il logcat mi restituisce l'errore che "... CAN'T CONVERT TO COLOR."
Ho provato ad applicare lo stesso attributo direttamente ad un layout e funziona perfettamente.  Mi sembra di capire che questi attributi di tema possano essere applicati solo a layout o stili. O capito bene? Dove sto sbagliando? Avete una soluzione alternativa per fare ciò che voglio fare?
« Ultima modifica: 11 Agosto 2011, 19:46:19 CEST da Igor Macrelli, Reason: miglioria di impaginazione estetica... »

Offline frigor

  • Nuovo arrivato
  • *
  • Post: 21
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    htc desire
  • Sistema operativo:
    windows xp e windows 7
Re:Problema nell'applicare un attributo di tema ad una shape XML.
« Risposta #1 il: 11 Agosto 2011, 21:02:15 CEST »
0
Solo per completezza inserisco il logcat dell'errore:
Codice: [Seleziona]
08-11 20:58:59.200: ERROR/AndroidRuntime(26167):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2803)
08-11 20:58:59.200: ERROR/AndroidRuntime(26167):     at android.app.ActivityThread.access$2300(ActivityThread.java:135)
08-11 20:58:59.200: ERROR/AndroidRuntime(26167):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2136)
08-11 20:58:59.200: ERROR/AndroidRuntime(26167):     at android.os.Handler.dispatchMessage(Handler.java:99)
08-11 20:58:59.200: ERROR/AndroidRuntime(26167):     at android.os.Looper.loop(Looper.java:144)
08-11 20:58:59.200: ERROR/AndroidRuntime(26167):     at android.app.ActivityThread.main(ActivityThread.java:4937)
08-11 20:58:59.200: ERROR/AndroidRuntime(26167):     at java.lang.reflect.Method.invokeNative(Native Method)
08-11 20:58:59.200: ERROR/AndroidRuntime(26167):     at java.lang.reflect.Method.invoke(Method.java:521)
08-11 20:58:59.200: ERROR/AndroidRuntime(26167):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
08-11 20:58:59.200: ERROR/AndroidRuntime(26167):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
08-11 20:58:59.200: ERROR/AndroidRuntime(26167):     at dalvik.system.NativeStart.main(Native Method)
08-11 20:58:59.200: ERROR/AndroidRuntime(26167): Caused by: android.view.InflateException: Binary XML file line #2: Error inflating class android.widget.LinearLayout
08-11 20:58:59.200: ERROR/AndroidRuntime(26167):     at android.view.LayoutInflater.createView(LayoutInflater.java:513)
08-11 20:58:59.200: ERROR/AndroidRuntime(26167):     at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56)
08-11 20:58:59.200: ERROR/AndroidRuntime(26167):     at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:563)
08-11 20:58:59.200: ERROR/AndroidRuntime(26167):     at android.view.LayoutInflater.inflate(LayoutInflater.java:385)
08-11 20:58:59.200: ERROR/AndroidRuntime(26167):     at android.view.LayoutInflater.inflate(LayoutInflater.java:320)
08-11 20:58:59.200: ERROR/AndroidRuntime(26167):     at android.view.LayoutInflater.inflate(LayoutInflater.java:276)
08-11 20:58:59.200: ERROR/AndroidRuntime(26167):     at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:207)
08-11 20:58:59.200: ERROR/AndroidRuntime(26167):     at android.app.Activity.setContentView(Activity.java:1654)
08-11 20:58:59.200: ERROR/AndroidRuntime(26167):     at it.studioundici.rilievo.Cartiglio.onCreate(Cartiglio.java:13)
08-11 20:58:59.200: ERROR/AndroidRuntime(26167):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1069)
08-11 20:58:59.200: ERROR/AndroidRuntime(26167):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2751)
08-11 20:58:59.200: ERROR/AndroidRuntime(26167):     ... 11 more
08-11 20:58:59.200: ERROR/AndroidRuntime(26167): Caused by: java.lang.reflect.InvocationTargetException
08-11 20:58:59.200: ERROR/AndroidRuntime(26167):     at android.widget.LinearLayout.<init>(LinearLayout.java:115)
08-11 20:58:59.200: ERROR/AndroidRuntime(26167):     at java.lang.reflect.Constructor.constructNative(Native Method)
08-11 20:58:59.200: ERROR/AndroidRuntime(26167):     at java.lang.reflect.Constructor.newInstance(Constructor.java:446)
08-11 20:58:59.200: ERROR/AndroidRuntime(26167):     at android.view.LayoutInflater.createView(LayoutInflater.java:500)
08-11 20:58:59.200: ERROR/AndroidRuntime(26167):     ... 21 more
08-11 20:58:59.200: ERROR/AndroidRuntime(26167): Caused by: android.content.res.Resources$NotFoundException: File res/drawable-hdpi/windows_background_01.xml from drawable resource ID #0x7f02000a
08-11 20:58:59.200: ERROR/AndroidRuntime(26167):     at android.content.res.Resources.loadDrawable(Resources.java:1697)
08-11 20:58:59.200: ERROR/AndroidRuntime(26167):     at android.content.res.TypedArray.getDrawable(TypedArray.java:601)
08-11 20:58:59.200: ERROR/AndroidRuntime(26167):     at android.view.View.<init>(View.java:1885)
08-11 20:58:59.200: ERROR/AndroidRuntime(26167):     at android.view.View.<init>(View.java:1834)
08-11 20:58:59.200: ERROR/AndroidRuntime(26167):     at android.view.ViewGroup.<init>(ViewGroup.java:293)
08-11 20:58:59.200: ERROR/AndroidRuntime(26167):     ... 25 more
08-11 20:58:59.200: ERROR/AndroidRuntime(26167): Caused by: java.lang.UnsupportedOperationException: Can't convert to color: type=0x2
08-11 20:58:59.200: ERROR/AndroidRuntime(26167):     at android.content.res.TypedArray.getColor(TypedArray.java:326)
08-11 20:58:59.200: ERROR/AndroidRuntime(26167):     at android.graphics.drawable.GradientDrawable.inflate(GradientDrawable.java:746)
08-11 20:58:59.200: ERROR/AndroidRuntime(26167):     at android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:788)
08-11 20:58:59.200: ERROR/AndroidRuntime(26167):     at android.graphics.drawable.Drawable.createFromXml(Drawable.java:729)
08-11 20:58:59.200: ERROR/AndroidRuntime(26167):     at android.content.res.Resources.loadDrawable(Resources.java:1694)
08-11 20:58:59.200: ERROR/AndroidRuntime(26167):     ... 29 more

Offline frigor

  • Nuovo arrivato
  • *
  • Post: 21
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    htc desire
  • Sistema operativo:
    windows xp e windows 7
Re:Problema nell'applicare un attributo di tema ad una shape XML.
« Risposta #2 il: 15 Agosto 2011, 12:19:40 CEST »
0
Siccome nessuno mi risponde aggiungo io una risposta che (forse) può essere di aiuto ai futuri lettori del post. Da quello che ho capito, sebbene più di una volta io abbia letto sul sito ufficiale di supporto che la proprietà android.color potesse essere assegnata sia con un riferimento a colore nelle stringhe xml (del tipo "@color/colore1") sia come riferimento ad un attributo di tema (del tipo "?colore1"), in questo caso specifico non si applica. Gli "attributi di tema" infatti dovrebbero funzionare  (non ho la certezza) solo all'interno di tag <Style> oppure solo direttamente nelle proprietà di un layout XML. Nel caso mio, invece, essendo utilizzati in file xml contenuti nella cartella Drawable con tag <shape> non vengono "interpretati".
Mi sono rassegnato ed ho dovuto costruire tanti <shape> differenti a seconda del tema! Da una parte è noioso ma dall'altra permette di customizzare ancora di più ogni <shape>. Se prima infatti potevo modificare solo il colore della forma adesso posso aggiungere ombre, gradienti e modificare ogni shape a mio piacimento cambiando ancora di più l'aspetto del tema...
La controindicazione è che il codice è veramente ridondante!
Se qualcuno ha qualche idea lo prego di metterla in risposta... qualsiasi spunto può essere di aiuto per sviluppare nuove soluzioni!