在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】:在这种情况下只有两个属性相关 - background
和 src
。如果您想为所有图像按钮使用相同的背景(带有颜色突出显示),您需要将随按钮变化的背景部分添加到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