在Android中删除ImageButton的默认背景但保持onClick突出显示

Posted

技术标签:

【中文标题】在Android中删除ImageButton的默认背景但保持onClick突出显示【英文标题】:Removing deafult background of ImageButton in Android but keep onClick highlight 【发布时间】:2012-12-30 01:58:00 【问题描述】:

我的应用中有几个 ImageButtons,我已经删除了默认的灰色背景

android:background="@android:color/transparent"android:background="@null"

问题是,它还移除了 onClick 高亮背景(API8 为橙色,API16 为蓝色)

我在这里阅读了很多问答,人们都建议使用selector。我不想为每个按钮制作另一个图像,我只想有一个背景颜色突出显示。有没有简单的方法来实现这一点?

解决方案:以编程方式

导入android.view.View;
导入 android.view.View.OnTouchListener;

// ...

btn.setOnTouchListener(新 OnTouchListener() 
    @覆盖
    public boolean onTouch(View v, MotionEvent 事件) 
        if(event.getAction() == (MotionEvent.ACTION_DOWN)) 
            // 设置背景高亮颜色
            btn.setBackgroundResource(R.color.blue);
        
        if(event.getAction() == (MotionEvent.ACTION_UP)) 
            // 恢复透明
            btn.setBackgroundResource(
                getResources().getColor(android.R.color.transparent));
        
        返回假;
    
);

那么并不简单,但可以完成这项工作并节省我大量时间为每个按钮制作另一个图像,而我并不真正需要花哨的点击样式。

【问题讨论】:

您的解决方案比创建选择器并将其应用于所有按钮(尤其是当背景为透明或纯色时)更简单? 【参考方案1】:

在这种情况下只有两个属性相关 - backgroundsrc。如果您想为所有图像按钮使用相同的背景(带有颜色突出显示),您需要将随按钮变化的背景部分添加到src设置的图像中,这不是太干净整洁(但当然,如果你愿意,你可以这样做)。

所以我认为这里最好是使用选择器作为背景,正如许多用户所建议的那样。

使用以下代码:

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

【讨论】:

如果您在 Booger 之前发布您的编辑版本,我会接受您的回答... @user1643156 没问题 :)【参考方案2】:

您确实需要为此使用选择器。

您可以在选择器中为背景使用颜色,它不需要是 PNG 资源(只需将背景设置为颜色,而不是可绘制资源)。

您将此代码放在您的可绘制文件夹中,并具有特定名称(如 button_sel.xml)。

然后您将其设置为 XML 中按钮的背景,它将如下所示:

android:background="@drawable/button_sel"

选择器看起来像这样:

<selector
    xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:drawable="@color/ab_background"
        android:state_focused="true"
        android:state_pressed="true"/>
    <item
        android:drawable="@color/ab_background"
        android:state_focused="false"
        android:state_pressed="true"/>
    <item
        android:drawable="@color/ab_background_on"
        android:state_focused="true"
        android:state_pressed="false"/>
    <item
        android:drawable="@color/ab_background_on"
        android:state_focused="false"
        android:state_pressed="false"/>
</selector>

【讨论】:

谢谢布格。我是 Android 编程新手,我认为我必须在选择器中使用图像。【参考方案3】:

不这么认为,您可以通过 API 搜索找到 ImageButton 的预定义选择器,而不是复制代码并按照您需要的方式更改选择器。因此,您将创建一个自定义 ImageButton。

但我认为没有简单的方法,就像您想要的那样,只需更改颜色即可

【讨论】:

【参考方案4】:

我也遇到了同样的问题,但现在已经解决了。如果您使用的是android:background="@null,它将导致根本没有背景,并且不会向用户显示任何按下按钮的动画。

只需添加这行代码即可使图像按钮在单击时闪烁。这是提醒用户单击图像按钮的正确方法。

 android:background="?android:selectableItemBackground

【讨论】:

以上是关于在Android中删除ImageButton的默认背景但保持onClick突出显示的主要内容,如果未能解决你的问题,请参考以下文章

android imageButton 点击按钮前中后,按钮颜色的变化

Android 开发笔记___图像按钮__imageButton

Android ImageButton 背景颜色

Android ActionBar 后退按钮默认填充

android 在代码中这是imagebutton的大小和间距。

在 Android 中的 ImageButton 中适合图像