删除Android中图像按钮的默认背景,但保持onClick高亮显示

时间:2013-01-15 20:53:24

标签: android background onclick

我的应用程序中有一些ImageButtons,我用

删除了默认的灰色背景

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

问题是,它还删除了onClick高亮背景(API8中的橙色和API16中的蓝色)

我在这里阅读了很多Q& A,人们都建议使用selector。我不想为每个按钮制作另一张图像,而是希望只有背景颜色突出显示。有没有一种简单的方法来实现这一目标?

解决方案:以编程方式

import android.view.View;
import android.view.View.OnTouchListener;

// ...

btn.setOnTouchListener(new OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        if(event.getAction() == (MotionEvent.ACTION_DOWN)) {
            // set background highlight color
            btn.setBackgroundResource(R.color.blue);
        }
        if(event.getAction() == (MotionEvent.ACTION_UP)) {
            // restore transparent
            btn.setBackgroundResource(
                getResources().getColor(android.R.color.transparent));
        }
        return false;
    }
});

这不是 简单,但完成工作并节省了我很多时间为每个按钮制作另一个图像,而我真的不需要花哨的onclick样式。

4 个答案:

答案 0 :(得分:5)

在这种情况下,只有两个属性相关 - 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>

答案 1 :(得分:4)

你真的需要使用一个选择器。

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

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

然后将其设置为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>

答案 2 :(得分:0)

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

但我不认为有一种简单的方法,就像你想要它只需改变颜色一样

答案 3 :(得分:0)

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

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

 android:background="?android:selectableItemBackground