2013-09-06 9 views
6

Ho problemi a personalizzare l'aspetto di un widget Android Switch. Ho dei drawable personalizzati in xml che voglio usare per il pollice (la piccola parte del pulsante che di solito dice On o Off) e la traccia (lo sfondo su cui scorre il pollice). Quando imposto il pollice usando android: thumb, funziona perfettamente. Quando imposto la traccia (indipendentemente dal fatto che il pollice sia impostato o meno), l'interruttore scompare completamente e mi rimane solo il testo visualizzato.Widget interruttore Android: impostazione Android: la traccia causa la mancata visualizzazione di pollice e traccia

Ecco il mio codice quando viene applicato solo il pollice:

<com.blahblahblah.blah.CustomSwitch 
    android:id="@+id/switch_1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:textOff="Off" 
    android:textOn="On" 
    android:text="Something Awesome" 
    android:textColor="@android:color/black" 
    android:thumb="@drawable/custom_switch_thumb" /> 

Ecco come appare nella finestra di anteprima:

enter image description here

E con la pista applicata:

<com.blahblahblah.blah.CustomSwitch 
    android:id="@+id/switch_1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:textOff="Off" 
    android:textOn="On" 
    android:text="Something Awesome" 
    android:textColor="@android:color/black" 
    android:track="@color/track_color" /> 

Finestra di anteprima con traccia applicata:

enter image description here

Per riferimento sto usando Android 0.2.3 Studio su OSX 10.7.5.

risposta

20

Mi sono appena imbattuto nello stesso problema e ho trovato una soluzione attraverso lo HoloEverywhere issue tracker. Dovrai impostare lo <size> della forma XML estraibile che stai utilizzando.

Non funziona (il widget è lì e posso interagire con esso, ma non riesco a vederlo, è nascosto):

<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle"> 

    <solid android:color="@color/black_50" /> 
</shape> 

di lavoro (non il aggiunto <size>):

<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle"> 

    <solid android:color="@color/black_50" /> 
    <size android:width="56dp" android:height="20dp" /> 
</shape> 
+0

Ho solo dovuto aggiungere un'altezza per sistemarlo. per esempio. RobB

0

In generale, solo per modificare un'immagine, non è necessario creare una sottoclasse di controllo per poterla modificare, ad es. con l'attributo style

Riguardo al problema ci sono diversi controlli che si aspettano un drawable e non un colore semplice. Nella definizione di controllo (la parte xml) puoi semplicemente definire di consentire un riferimento ma non puoi limitarlo a riferimenti disegnabili. Quindi evita semplicemente di usare i colori direttamente. Se non vuoi aggiungere un'immagine, puoi anche definirla con xml, ma nota che questo non funziona in tutti i casi.

+0

Grazie per la risposta. So che non ho bisogno di sottoclasse il controllo, ma lo sto facendo in modo trasversale per questa particolare applicazione. Non dovrebbe influenzare nulla, specialmente non a questo punto, perché le mie sottoclassi hanno solo costruttori superati che chiamano semplicemente super (...) e non fanno altro. Ho provato un drawable e solo un colore. Devo ancora trovare un caso in cui un colore * non * funzioni quando è preferibile un drawable. Funziona sempre in tutti gli altri casi. In questo caso particolare, usando un drawable o un colore, nessuno dei due funziona. Funziona bene per il pollice, ma non per la traccia. –

Problemi correlati