Reputation: 10346
I've set up an ImageButton to be transparent, so the icon matches the backgrond panel like the Android ActionBar. This looks fine as I want it to.
However, when the background is transparent, there isn't the blueish highlight you see as when you press a transparent button in the action bar.
Can I have an ImageButton that is transparent and also has the highlight flash when clicked?
<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" />
Upvotes: 42
Views: 37032
Reputation: 1283
Just to add on Fernandez good answer:
If you want the effect to be Round and not rectangle use:
android:background="?android:selectableItemBackgroundBorderless"
(*for V21 and up).
Upvotes: 10
Reputation: 658
If you want to do it programmatically, here is one solution:
Create a custom ImageButton
class and Override 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
}
}
Upvotes: 3
Reputation: 1441
I came across this same problem. Finally, I got a sample of a code with that attribute:
android:background="?android:selectableItemBackground"
This attibute will give a transparent background with selectable highlight to any View (Button, ImageButton, TextView...) WITHOUT MORE CODING!!!
Upvotes: 144
Reputation: 23977
All you need to do is to set the proper background. If you want it to be transparent in normal state and blueish in pressed stated.
Create a StateListDrawable like this one in res/drawable
directory.
<?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>
This way the default background is transparent. When pressed the background has the color you specified (instead of color you can use any drawable here).
Upvotes: 40