2012-10-10 17 views
35

Ho impostato un ImageButton per essere trasparente, quindi l'icona corrisponde al pannello backgrond come l'ActionBar Android. Questo sembra buono come voglio.ImageButton non evidenzia al clic con sfondo trasparente

Tuttavia, quando lo sfondo è trasparente, non c'è l'evidenziazione bluastra che si vede quando si preme un pulsante trasparente nella barra delle azioni.

Posso avere un ImageButton che è trasparente e ha anche il flash di evidenziazione quando si fa clic?

<ImageButton 
    android:id="@+id/nextItemButton" 
    style="?android:attr/buttonStyleSmall" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentRight="true" 
    android:layout_alignParentTop="true" 
    android:background="@null" 
    android:src="@drawable/ic_media_ff" /> 

risposta

32

Tutto quello che devi fare è impostare lo sfondo corretto. Se vuoi che sia trasparente nello stato normale e bluastro in premuto premuto.

Creare uno StateListDrawable come questo nella directory res/drawable.

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

In questo modo lo sfondo predefinito è trasparente. Quando viene premuto lo sfondo ha il colore specificato (al posto del colore è possibile utilizzare qualsiasi drawable qui).

+0

Sfortunatamente, l'evidenziazione del pulsante negli stili Android incorporati non è pubblica. Questo è il colore personalizzato con cui ho finito. Era il più vicino possibile al colore Jelly Bean, che a mio avviso è dello stesso colore in ICS: # 057891 Utilizzando StateListDrawable funzionava alla grande. –

+0

Il colore premuto predefinito dipende dal dispositivo e dalla versione di Android in esecuzione. Il tema Holo utilizza drawable bluastro semitrasparente a 9 patch nello stato premuto. – Tomik

+0

Finalmente qualcosa che funziona. Grazie – frostymarvelous

2

Se si vuole fare a livello di codice, ecco una soluzione:

Creare una classe personalizzata ImageButton e sovrascrivere drawableStateChange():

public class CustomImageButton extends ImageButton { 

    @Override 
    protected void drawableStateChanged() { 
     Log.d("Button", "isPressed: " + isPressed()); 
     if(isPressed()){ 
      setBackgroundResource(android.R.color.holo_blue_dark); 
     } else { 
      setBackgroundResource(android.R.color.transparent); 
     } 
     super.drawableStateChanged(); 

    } 

    public CustomImageButton(Context context) { 
     super(context); 
    } 

    public CustomImageButton(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    public CustomImageButton(Context context, AttributeSet attrs, int defStyle) { 
     super(context, attrs, defStyle); 
     // TODO Auto-generated constructor stub 
    } 



} 
114

mi sono imbattuto in questo stesso problema. Infine, ho ottenuto un campione di un codice con tale attributo:

android:background="?android:selectableItemBackground" 

Questa attibute darà uno sfondo trasparente con il punto culminante selezionabile a qualsiasi vista (Button, ImageButton, TextView ...) SENZA PIÙ CODIFICA !!!

+3

Se stai usando ActionBarSherlock, usa Android: background = "? SelectableItemBackground". – NightWhistler

+1

Può essere impostato su una vista a livello di programmazione? – Badams

+1

vota ragazzi! la migliore soluzione che ho trovato! –

4

solo aggiungere su Fernandez buona risposta:

Se si desidera che l'effetto di essere rotonda e non uso rettangolo:

android:background="?android:selectableItemBackgroundBorderless"  

(* per la V21 e su).