我已将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" />
答案 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
}
}