我的应用程序中有一些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样式。
答案 0 :(得分:5)
在这种情况下,只有两个属性相关 - 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>
答案 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