Android ImageButton 背景颜色

Posted

技术标签:

【中文标题】Android ImageButton 背景颜色【英文标题】:Android ImageButton background color 【发布时间】:2012-07-22 07:22:44 【问题描述】:

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

我搜索了一下,发现您可以按照here 的说明分配选择器,但这意味着我必须为每个按钮状态指定一个图像,我不想这样做。我想从主题继承焦点/按下的颜色,但将普通按钮背景(未按下/聚焦时)覆盖为透明而不是灰色。我怎样才能做到这一点?请提供一个工作示例,因为我尝试了许多不同的组合但没有成功。

编辑 谢谢大家的帮助。我想出了如何做到这一点,而不必为每个按钮重新创建具有焦点和按下状态的相同图像!

这是我的解决方案:

我的按钮定义为:

<ImageButton
            android:id="@+id/ImageButton05"
            android:layout_
            android:layout_
            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】:

您可以将某些内容放入 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: android:color="#000000" />
</shape>

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

用于设置背景颜色/图像并具有点击突出效果, 这是一个例子(参考: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。

【讨论】:

这意味着我必须为每个状态指定一个图像,这不是我想要做的,正如我解释的那样【参考方案2】:

我想从主题继承焦点/按下的颜色,但将普通按钮背景(未按下/聚焦时)覆盖为透明而不是灰色。我怎样才能做到这一点??

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

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

编辑: 这是聚焦和按下的默认全息按钮图像

【讨论】:

图像不包含任何灰色.. 正如我解释的那样,它们是透明的 焦点确实,被按下的有一个深蓝色的框而不是灰色。看我的编辑。您必须编辑上面图像中的内部“框”以仅留下辉光照明效果。您可以编辑您的问题并发布您的 imagebutton xml 声明之一。也许我误解了你想要做什么,这会让我更清楚。【参考方案3】:

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

【讨论】:

【参考方案4】:

你可以把它写在你的xml文件中:

android:background="@null"

它对我有用。

【讨论】:

【参考方案5】:

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

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

希望对大家有所帮助

【讨论】:

以上是关于Android ImageButton 背景颜色的主要内容,如果未能解决你的问题,请参考以下文章

按下Android设置背景颜色按钮

android studio开发笔记一

Android Studio : ImageButton 图像/背景闪光

如何获取按钮的背景颜色

android Imagebutton 点击更换背景图片,图是换了Imagebutton的大小为啥也变了?

在Android中删除ImageButton的默认背景但保持onClick突出显示