使用透明背景单击时,ImageButton不会突出显示

时间:2012-10-10 18:07:37

标签: android button transparency

我已将ImageButton设置为透明,因此该图标与Android ActionBar等背景墙面板相匹配。这看起来很好,因为我想要它。

但是,当背景透明时,在操作栏中按透明按钮时,您看不到蓝色突出显示。

我可以拥有一个透明的ImageButton,点击时还有高亮闪烁吗?

<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" />

4 个答案:

答案 0 :(得分:126)

我遇到了同样的问题。最后,我得到了一个具有该属性的代码示例:

android:background="?android:selectableItemBackground"

此属性将为任何视图(Button,ImageButton,TextView ...)提供透明背景和可选高亮显示无需更多编码!!!

答案 1 :(得分:36)

您需要做的就是设置正确的背景。如果你希望它在正常状态下是透明的,在按压状态下是蓝色的。

res/drawable目录中创建StateListDrawable这样的{。}}。

<?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>

这样默认背景是透明的。按下后,背景会显示您指定的颜色(而不是颜色,您可以使用任何可绘制的颜色)。

答案 2 :(得分:5)

加上费尔南德斯的好答案:

如果您希望效果为圆形而不是矩形,请使用:

android:background="?android:selectableItemBackgroundBorderless"    

(*为V21及以上)。

答案 3 :(得分:2)

如果你想以编程方式进行,这里有一个解决方案:

创建自定义ImageButton课程并覆盖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
    }



}