2012-07-24 1 views
11

Possiedo un ImageButton con un'immagine di sfondo con qualche trasparenza. Per impostazione predefinita, il pulsante assume uno sfondo grigio dove sono i pixel di trasparenza, a causa del tema Holo.Light. Ho provato a impostare il colore di sfondo del pulsante per la trasparenza tramite il metodo setBackgroundColor(Color.TRANSPARENT). Funziona bene e fa ciò di cui ho bisogno tranne che ora il mio pulsante non ha più il colore azzurro quando è focalizzato/premuto e sembra piuttosto piatto (senza bordi intorno, quindi sembra un'immagine).Colore sfondo Android ImageButton

Ho cercato su google e ho visto che è possibile assegnare i selettori come spiegato here ma ciò significherebbe che devo specificare un'immagine per stato del pulsante e non voglio farlo. Voglio ereditare i focus/i colori premuti dal tema, ma sovrascrivere il normale sfondo del pulsante (quando non premuto/focalizzato) in trasparente anziché in grigio. Come posso ottenerlo ?? Si prega di fornire un esempio funzionante in quanto ho provato molte combinazioni diverse senza successo.

Modifica Grazie a tutti per l'aiuto. Ho capito come far funzionare questo lavoro senza dover ricreare la stessa immagine con gli stati focalizzati e premuti per ogni pulsante!

Ecco la mia soluzione:

mio pulsante è definito come:

<ImageButton 
      android:id="@+id/ImageButton05" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_gravity="center" 
      android:background="@drawable/button" /> 

E il mio background di file XML (intitolato button.xml) è definito come segue:

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 

    <item android:state_pressed="true"> 
     <layer-list> 
      <item android:drawable="@drawable/btn_default_pressed_holo_light"></item> 
      <item android:drawable="@drawable/network_wifi"></item> 
     </layer-list> 
    </item> 
    <item android:state_focused="true"> 
     <layer-list> 
      <item android:drawable="@drawable/btn_default_focused_holo_light"></item> 
      <item android:drawable="@drawable/network_wifi"></item> 
     </layer-list> 
    </item> 
    <item android:state_hovered="true"> 
     <layer-list> 
      <item android:drawable="@drawable/btn_default_focused_holo_light"></item> 
      <item android:drawable="@drawable/network_wifi"></item> 
     </layer-list> 
    </item> 
    <item> 
     <layer-list> 
      <item android:drawable="@drawable/btn_default_normal_holo_light"></item> 
      <item android:drawable="@drawable/network_wifi"></item> 
     </layer-list> 
    </item> 
</selector> 

risposta

1

Voglio ereditare i colori di messa a fuoco/pressati dal tema, ma sovrascrivere il normale sfondo del pulsante (quando non premuto/focalizzato) a trasparente invece di gr ey. Come posso ottenerlo ??

AFAIK non è possibile perché i colori di attivazione/pressione sono incorporati nella stessa immagine risorse che contengono lo sfondo grigio.

Se si desidera mantenere attivo/premuto il sistema, ma rimuovere lo sfondo, è necessario acquisire una copia delle risorse dell'immagine (che è possibile trovare nell'SDK all'indirizzo /sdkroot/platforms/[version]/data/res/drawable-hdpi sostituire [versione] con qualsiasi livello di API che si è dopo. E se è necessario sostituire hdpi con un'altra densità) e modificare il pulsante grigio da loro con un editor di foto. Quindi fai un selettore che fa riferimento alle tue immagini modificate e impostalo come sfondo per il tuo pulsante.

EDIT: Qui ci sono le immagini dei pulsanti di default Holo per concentrato e premuto

focused

pressed

+0

le immagini non contengono alcun grigio .. sono trasparenti come ho spiegato – Ayyoudy

+0

il focalizzato fa, il premuto ha una casella blu scuro anziché grigio. vedi la mia modifica. Dovresti modificare la "scatola" interna nelle immagini sopra per lasciare solo l'effetto di illuminazione a bagliore. Puoi modificare la tua domanda e pubblicare una delle tue dichiarazioni xml di imagebutton. Forse sto fraintendendo quello che stai cercando di fare, questo renderà più chiaro a me. – FoamyGuy

3

si può mettere qualcosa in un file XML, ad esempio, custom_button.xml e quindi impostare background="@drawable/custom_button" nella visualizzazione dei pulsanti.

prega di fare riferimento a questo link in quanto v'è un esempio xml: Standard Android Button with a different color

ho usato nel mio codice e ha funzionato nel modo che volevo.

Riferimento: Standard Android Button with a different color


Modificato:

Se si preferisce utilizzare Forse si dovrebbe cercare di impostare un bordo. Per esempio (Riferimento: Android - border for button):

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle"> 
    <gradient android:startColor="#FFFFFF" 
    android:endColor="#00FF00" 
    android:angle="270" /> 
    <corners android:radius="3dp" /> 
    <stroke android:width="5px" android:color="#000000" /> 
</shape> 

O, si potrebbe provare a impostare lo stile/tema per il pulsante. (Ma sarebbe in un file separato) Lo stile/tema contiene gli attributi di colore per vari stati di pulsante come attivo/abilitato/disabilitato/ecc.

Per l'impostazione del colore di sfondo/immagine e l'effetto di evidenziazione del clic, Ecco un esempio (Riferimento: How to programmatically setting style attribute in a view)

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item 
    android:state_pressed="true" 
    android:drawable="@drawable/btn_pressed" /> 
    <item 
    android:state_pressed="false" 
    android:drawable="@drawable/btn_normal" /> 
</selector> 

È possibile quindi applicare questo selettore a un pulsante impostando la proprietà Android: background = "@ drawable/my_button".

+0

Ciò significa che devo specificare un'immagine per stato che non è quello che voglio fare come ho spiegato – Ayyoudy

1

È possibile utilizzare ImageView anziché ImageButton per risolvere il problema. Impostare Android: proprietà di sfondo di ImageView sul colore di sfondo del genitore.

1

È possibile scrivere questo nel file XML:

android:background="@null" 

ha funzionato per me.

0

se u non ha bisogno lo sfondo grigio di default e di bisogno di u il vostro ImageButton sembra come un'icona senza alcun sfondi basta utilizzare Android: attributo background e impostarlo

@android:color/transparent** 
<ImageButton 
android:id="@+id/ImageButton05" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:layout_gravity="center" 
android:background="@android:color/transparent" 
android:background="@drawable/button" /> 

speranza che aiutano nessuno