3

我的应用程序中有一些 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));
        }
        返回假;
    }
});

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

4

4 回答 4

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>
于 2013-01-15T21:00:05.663 回答
4

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

您可以在选择器中为背景使用颜色,它不需要是 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>
于 2013-01-15T21:11:20.757 回答
0

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

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

于 2013-01-15T20:59:03.740 回答
0

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

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

 android:background="?android:selectableItemBackground
于 2016-10-18T02:15:15.400 回答