ImageButton在背景颜色覆盖上显示奇怪的行为

时间:2017-11-30 11:28:50

标签: android android-imagebutton

在设置ImageButton时,我注意到它有一些灰色背景颜色与UI的其余部分不一致。

enter image description here

这是ImageButton的代码

<ImageButton
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentEnd="true"
    android:layout_alignParentRight="true"
    android:src="@drawable/ic_material"/>

但是当我试图将背景覆盖为透明时,如下所示:

<ImageButton
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentEnd="true"
    android:layout_alignParentRight="true"
    android:src="@drawable/ic_material"
    android:background="@android:color/transparent"/>

按钮完全失去了形状和填充

enter image description here

有谁知道为什么会这样?

3 个答案:

答案 0 :(得分:2)

这是因为您将颜色设置为背景,而且颜色没有尺寸/尺寸。

您可以使用任何图像作为背景进行检查,视图将采用该图像的大小。 我们可以说背景图像不支持缩放类型。

只有src支持ImageView或其他扩展ImageView的类的缩放类型

答案 1 :(得分:2)

imageButton有背景的原因是因为它是一个基本上带有图像而不是文本的按钮。所以根据android文档:

  

ImageButton 公共类 ImageButton扩展ImageView

     

显示一个按钮,其中包含可以按下的图像(而不是文本)   或者由用户点击。默认情况下,ImageButton看起来像   常规按钮,带有改变颜色的标准按钮背景   在不同的按钮状态。按钮表面上的图像   由android中的android:src属性定义   XML元素或通过setImageResource(int)方法。要删除   标准按钮背景图像,定义您自己的背景图像或   将背景颜色设置为透明。表明不同   按钮状态(聚焦,选择等),您可以定义不同的   每个州的形象。例如,默认为蓝色图像,橙色图像为   聚焦时,按下时为黄色。一个简单的方法   这是一个XML drawable“选择器”。例如:

version="1.0" encoding="utf-8"?>  <selector
> xmlns:android="http://schemas.android.com/apk/res/android">
>      <item android:state_pressed="true"
>            android:drawable="@drawable/button_pressed" /> <!-- pressed -->
>      <item android:state_focused="true"
>            android:drawable="@drawable/button_focused" /> <!-- focused -->
>      <item android:drawable="@drawable/button_normal" /> <!-- default -->  </selector> 

将XML文件保存在项目res / drawable /文件夹中,然后将其作为

源代码的drawable引用
  

ImageButton(在android:src属性中)。 Android会自动进行   根据按钮和状态更改图像   XML中定义的相应图像。的顺序   元素很重要,因为它们是按顺序评估的。这就是为什么   “普通”按钮图像是最后一个,因为它只会被应用   在android:state_pressed和android:state_focused之后都有   评价错误。请参阅按钮指南。

有关详细信息,请查看文档:{​​{3}}

答案 2 :(得分:0)

使用android:background="#000000"

imageButton.setBackgroundDrawable(null);