Autore Topic: Custom view e styleable  (Letto 756 volte)

Offline D-Easy

  • Nuovo arrivato
  • *
  • Post: 3
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Tattoo
  • Play Store ID:
    D-Easy
  • Sistema operativo:
    Linux
Custom view e styleable
« il: 06 Luglio 2010, 11:59:03 CEST »
0
ciao a tutti, sono nuovo del forum.
Mi sono iscritto principalmente perché sto incontrando un problema e non capisco cosa non funzioni.
Ve lo espongo.
Ho modificato il sorgente di AnalogClock di android per realizzarne uno customizzato (mi servivano un paio di funzioni in +). Funziona perfettamente sulla activity ma il mio punto di arrivo è inserirlo in un widget.
Per farlo ho pensato di implementare i seguenti passi:

Questo è il mio file attrs.xml dove ho definito le caratteristiche modificabili
Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <declare-styleable name="tk.desy.mioClock.MioClock">
        <attr name="dial" format="string" />
        <attr name="hour_hand" format="string" />
        <attr name="minute_hand" format="string" />
    </declare-styleable>
</resources>

Nel layout lo ho richiamato l'oggetto customizzato con xmlns dandogli il nome di collegamento hc (come si vede da codice).

Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout android:id="@+id/LinearLayout01" android:layout_width="fill_parent" android:layout_height="fill_parent" xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:gravity="center_horizontal">
<TextView android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/suca" android:text="prova"></TextView>
<tk.desy.MioClock
        xmlns:hc="http://schemas.android.com/apk/res/tk.desy.mioClock"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        hc:dial="@drawable/figura1"
        hc:hour_hand="@drawable/figura_ore"
        hc:minute_hand="@drawable/figura_minuti"></tk.desy.MioClock>
</LinearLayout>

Chiaramente il mio costruttore deve supportare la cosa:

Codice (Java): [Seleziona]
    public MioClock(Context context, AttributeSet attrs, int defStyle)
    {
                super(context, attrs, defStyle);

                Resources r = context.getResources();
                TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.tk_desy_mioClock_MioClock);

        mDial = a.getDrawable(tk.desy.mioClock.R.styleable.tk_desy_mioClock_MioClock_dial);
        if (mDial == null)
                mDial = r.getDrawable(R.drawable.figura1);
        mHourHand = a.getDrawable(tk.desy.mioClock.R.styleable.tk_desy_mioClock_MioClock_hour_hand);
        if (mHourHand == null)
                mHourHand = r.getDrawable(R.drawable.figura_ore);
        mMinuteHand = a.getDrawable(tk.desy.mioClock.R.styleable.tk_desy_mioClock_MioClock_minute_hand);
        if (mMinuteHand == null)
                mMinuteHand = r.getDrawable(R.drawable.figura_minuti);
                mCalendar = new Time();
               
                mDialWidth = mDial.getIntrinsicWidth();
                mDialHeight = mDial.getIntrinsicHeight();
        }

grossomodo è questo.

Nella activity tutto ok (lo ho inserito da codice creando il layout a mano) mentre nel widget (il file xml lo ho allegato sopra) non funziona e non viene visualizzato. Se elimino il mio orologio e lascio solo la textview il widget funziona.
Potete aiutarmi?
« Ultima modifica: 06 Luglio 2010, 12:39:40 CEST da JD, Reason: Usate i bbcode java e xml!! xD »