2012-07-24 93 views
11

我有一个带有背景图片的ImageButton,它具有一些透明度。默认情况下,由于Holo.Light主题的原因,该按钮会在透明度像素处显示灰色背景。我尝试通过setBackgroundColor(Color.TRANSPARENT)方法将按钮的背景颜色设置为透明。这工作得很好,做我需要的东西,除了现在我的按钮在聚焦/按下时不再具有浅蓝色,并且看起来相当平坦(没有边框,所以它看起来像一个图像)。Android ImageButton背景色

我GOOGLE了一下,看到你可以按照解释here来指定选择器,但这意味着我必须为每个按钮状态指定一个图像,我不想这样做。我想从主题继承焦点/按下的颜色,但覆盖正常的按钮背景(未按下/聚焦时)为透明而不是灰色。我怎么能做到这一点?请提供一个工作示例,因为我尝试了许多不同的组合,但都没有成功。

编辑 谢谢大家的帮助。我想出了如何使这项工作无需重新创建每个按钮的焦点和按下状态的相同图像!

这里是我的解决方案:

我的按钮被定义为:

<ImageButton 
      android:id="@+id/ImageButton05" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_gravity="center" 
      android:background="@drawable/button" /> 

而且我的背景XML文件(名为button.xml)的定义如下:

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 

    <item android:state_pressed="true"> 
     <layer-list> 
      <item android:drawable="@drawable/btn_default_pressed_holo_light"></item> 
      <item android:drawable="@drawable/network_wifi"></item> 
     </layer-list> 
    </item> 
    <item android:state_focused="true"> 
     <layer-list> 
      <item android:drawable="@drawable/btn_default_focused_holo_light"></item> 
      <item android:drawable="@drawable/network_wifi"></item> 
     </layer-list> 
    </item> 
    <item android:state_hovered="true"> 
     <layer-list> 
      <item android:drawable="@drawable/btn_default_focused_holo_light"></item> 
      <item android:drawable="@drawable/network_wifi"></item> 
     </layer-list> 
    </item> 
    <item> 
     <layer-list> 
      <item android:drawable="@drawable/btn_default_normal_holo_light"></item> 
      <item android:drawable="@drawable/network_wifi"></item> 
     </layer-list> 
    </item> 
</selector> 

回答

1

我想继承主题中的焦点/按下的颜色,但覆盖正常的按钮背景(未按下/聚焦时)为透明而不是gr安永。我怎么能做到这一点?

AFAIK你不能因为焦点/按下的颜色内置到包含灰色背景的相同图像资源。

如果你想保持系统焦点/按下,但删除背景,你将不得不抓住一个图像资源的副本(可以在你的SDK中找到/sdkroot/platforms/[version]/data/res/drawable-hdpi用任何你所在的api级别替换[版本]之后,如果需要用另一个密度替换hdpi),并用照片编辑器编辑灰色按钮。然后制作一个引用修改过的图像并将其设置为按钮背景的选择器。

编辑: 下面是集中默认全息按钮图像,并按下

focused

pressed

+0

图像不包含任何灰色..他们是透明的,因为我解释 – Ayyoudy 2012-07-24 02:13:52

+0

的重点是,按下有一个暗蓝色框,而不是灰色。看我的编辑。您必须在上面的图像中编辑出内部的“框”才能留下发光效果。你可以编辑你的问题,并张贴你的imagebutton XML声明之一。也许我误解了你正在做的事情,这会让我更加清楚。 – FoamyGuy 2012-07-24 03:29:11

3

你可以把东西放到一个XML文件,例如,custom_button.xml然后设置background="@drawable/custom_button"在按钮视图中。

请参考此链接,因为是一个XML例子:Standard Android Button with a different color

我用它在我的代码和它的工作只是我想要的方式。

参考: Standard Android Button with a different color


编辑:

如果您愿意使用 也许你应该尝试设置一个边界。 例如(参考:Android - border for button):

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle"> 
    <gradient android:startColor="#FFFFFF" 
    android:endColor="#00FF00" 
    android:angle="270" /> 
    <corners android:radius="3dp" /> 
    <stroke android:width="5px" android:color="#000000" /> 
</shape> 

OR, 你可以尝试设置样式/主题为按钮。 (但它将在一个单独的文件中) 样式/主题包含按钮的各种状态(如聚焦/启用/禁用/等)的颜色属性。

用于设置背景颜色/图像并具有单击高亮效果, 下面是一个例子(参考:How to programmatically setting style attribute in a view):背景=“@绘制/ my_button”

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item 
    android:state_pressed="true" 
    android:drawable="@drawable/btn_pressed" /> 
    <item 
    android:state_pressed="false" 
    android:drawable="@drawable/btn_normal" /> 
</selector> 

然后,可以通过设置属性机器人此选择器适用于一个按钮。

+0

这将意味着我必须指定一个图像每个国家这不是我想要做的,因为我解释 – Ayyoudy 2012-07-24 02:16:08

1

您可以使用ImageView而不是ImageButton来解决您的问题。请将ImageView的android:background属性设置为父级的背景颜色。

1

您可以在XML文件中这样写:

android:background="@null" 

它为我工作。

0

如果你不需要默认的灰色背景和u需要你的ImageButton似乎是一个图标没有任何背景,只是使用Android:背景属性并将其设置为

@android:color/transparent** 
<ImageButton 
android:id="@+id/ImageButton05" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:layout_gravity="center" 
android:background="@android:color/transparent" 
android:background="@drawable/button" /> 

希望帮助别人