Android ImageButton背景色

时间:2012-07-24 01:50:02

标签: android background android-widget imagebutton

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

我用谷歌搜索,看到你可以按照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>

5 个答案:

答案 0 :(得分: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

<?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>

然后,您可以通过设置属性android:background =“@ drawable / my_button”将此选择器应用于Button。

答案 1 :(得分:1)

  

我想从主题继承焦点/按下的颜色,但是将正常的按钮背景(未按下/聚焦时)覆盖为透明而不是灰色。我怎样才能实现这个目标?

您不能使用AFAIK,因为焦点/按下的颜色内置于包含灰色背景的相同图像资源中。

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

修改 以下是聚焦和按下的默认全息按钮图像

focused

pressed

答案 2 :(得分:1)

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

答案 3 :(得分:1)

您可以在xml文件中写下:

android:background="@null"

它对我有用。

答案 4 :(得分:0)

如果你不需要默认的灰色背景,你需要你的ImageButton看起来像一个没有背景的图标只需使用android:background属性并将其设置为

@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" />

希望能帮助任何人