当前位置: 首页 > 知识库问答 >
问题:

在Android中删除ImageButton的背景,但保留onClick高亮

姜智渊
2023-03-14

我在我的应用程序中有几个图像按钮,我已经删除了默认的灰色背景

android:background=“@android:color/transparent”android:background=“@null”

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

我读了很多Q

解决方案:以编程方式

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;
    }
});

它并没有那么简单,但它确实完成了这项工作,并为我节省了很多时间,为每个按钮制作另一个图像,而我并不真正需要花哨的点击样式。

共有3个答案

糜雪峰
2023-03-14

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

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

蒲寂离
2023-03-14

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

您可以在选择器中为背景使用颜色,它不需要是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>
包谭三
2023-03-14

在这种情况下只有两个相关的属性- background和< code>src。如果你想对所有的图像按钮使用相同的背景(带颜色高亮),你需要把从一个按钮到另一个按钮变化的那部分背景添加到你的由< code>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>
 类似资料:
  • 问题内容: 对于字符串,我需要它成为。 使用此正则表达式str.replaceAll(“(\ s | \ n)”,“”); 我可以得到“ abc123xyz”,但是如何在两者之间获得空格。 问题答案: 您不必使用正则表达式;您可以使用和代替。 这将为您提供您要查找的字符串。

  • 我有一个简单的数据库表 我想删除所有按fv和sv分组的重复行。这已经是一个相当流行的问题,有很好的答案。但我需要改变这种情况。当rel\u id为NULL时,我想保留该行。在任何其他情况下,任何事情都会发生。 所以通过使用以下值 任何一个 或 将是有效的结果。其中为 不会。因为第一个条目有作为,它在之上担任主席。 我目前有这个(这是关于基本重复问题的答案)作为删除重复项的查询,但我不确定如何继续修

  • 问题内容: 我有一条通用规则,该规则为所有DIV提供背景图像。 我有一个div(id =’a’),但我不希望它具有背景图像。 我必须给它什么CSS规则? 问题答案: 尝试:

  • 问题内容: 我正在使用Android手机作为主要处理器并使用摄像头检测运动的机器人项目。我从OpenCV获得了Android二进制包并正确安装它。我可以使用OpenCV本机相机捕获图像并将其显示在屏幕上。我在使用背景减法类时遇到问题。我可以在构造函数中创建一个新的BackgroundSubtractorMOG对象,但是当我尝试运行下面的代码时,它强制退出了,我从本地代码中收到错误“ Backgro

  • 问题内容: 问题是这样的:我有一个像这样的XML片段: 为了得到结果,我想删除所有-和-Tags,但保留它们的(文本)内容和子节点不变。另外,-Element应该保持不变。结果应该这样 目前,我将回到一个非常肮脏的把戏:我将etree.tostring这个片段,通过正则表达式删除有问题的标签,并用etree.fromstring结果替换原始片段(不是真正的代码,但是应该这样): 我知道我可能可以使