如何拥有透明的 ImageButton:Android

Posted

技术标签:

【中文标题】如何拥有透明的 ImageButton:Android【英文标题】:How to have a transparent ImageButton: Android 【发布时间】:2011-03-25 02:03:42 【问题描述】:
<ImageButton android:id="@+id/previous"
android:layout_
android:layout_
android:src="@drawable/media_skip_backward"
android:background="@drawable/transparent"></ImageButton>

这就是我试图获得一个透明的 ImageButton 以便将这些按钮放在 SurfaceView 上的原因。但是 Eclipse,只要我在 xml 中包含透明行,就会在项目中给我一个错误。

请帮忙。

【问题讨论】:

只是一个旁注:除了你自己的透明图像,你通常也可以只使用@android:color/transparent - 不需要你自己的自定义透明图像 请注意,通过为图像按钮提供透明背景,您正在删除按钮单击(并且可能是禁用)状态的视觉反馈。这会导致可用性略有下降。 为了确保 ImageButton 实际放置在 SurfaceView 上,调用 previousButton.bringToFront() 也很有用,否则它可能仍然隐藏在 SurfaceView 后面 Android API 提供了正确的属性来创建透明背景,而不会丢失按钮单击或其他状态的视觉反馈!在下面阅读我的答案! 【参考方案1】:

尝试使用 null 作为背景...

android:background="@null"

【讨论】:

谢谢。这行得通。只看到图像而不是它周围的框。但是我可以把这个按钮放在 SurfacaView 上,即放在视频预览上吗?这可能吗?我该怎么做? @Namratha SurfaceView 应该允许您将按钮放在表面上,但请注意:“这可用于在表面上放置按钮等覆盖层,但请注意它可以对性能有影响,因为每次 Surface 更改时都会执行完整的 alpha 混合复合材料。”来自developer.android.com/reference/android/view/SurfaceView.html 使用空背景是不正确的!! Android API 提供了正确的属性来创建透明背景,而不会丢失按钮单击或其他状态的视觉反馈!在下面阅读我的答案! 将按钮背景设置为 null 并不是一个好主意,如上所述。使用适当属性的答案要好得多,或者创建正确的选择器,对未点击和点击时的适当反馈透明。 这给了我一个错误..但这对我有用 android:background="@android:color/transparent"【参考方案2】:

不要使用 TRANSAPENT 或 NULL 布局,因为这样按钮(或通用视图)在点击时将不再高亮!!!

我遇到了同样的问题,最后我从 Android API 中找到了正确的属性来解决问题。它可以应用于任何视图。

在按钮规范中使用它:

android:background="?android:selectableItemBackground"

【讨论】:

这需要 API 11 - 你淘汰了 24% 的手机(截至 2014 年 1 月) 似乎使用 Support 库,API>=11 要求可能会被克服 ***.com/questions/19714682/… 要获得圆形波纹效果,请使用android:background="?android:selectableItemBackgroundBorderless" 幸运的是,截至 2019 年,这几乎淘汰了 0% 的手机。 这比昆汀的最佳答案更好?【参考方案3】:

你也可以使用透明色:

android:background="@android:color/transparent"

【讨论】:

@Geykel, @Adam,你应该知道这个属性在无条件使用时是非常危险的,因为它会添加另一个透明层,这将被绘制到屏幕上,并可能导致透支像素并减慢你的应用。为了测试它,您可以使用Developer option: Show GPU overdraw 并查看将背景设置为@null@android:color/transparent 之间的区别。 这是最好最有效的答案。 :)【参考方案4】:

将背景设置为"@null" 将使按钮在单击时无效。这将是一个更好的选择。

style="?android:attr/borderlessButtonStyle"

后来发现用了

android:background="?android:attr/selectableItemBackground"

也是一个很好的解决方案。并且您可以按照自己的风格继承此属性。

【讨论】:

对我不起作用,第二个使应用程序崩溃。也许我做错了,但我不知道是什么。 需要 API 级别 11。Source 这是正确答案。同样使用 AppCompact,有了这个答案,涟漪效果可以完美地工作,并且在 api 19 上,正常的按下效果开箱即用。 android:background="?android:attr/selectableItemBackground" 太棒了! selectableItemBackground 的这个解决方案还有一个额外的好处,就是让按钮在点击时改变状态。其他解决方案使按钮看起来不可点击。【参考方案5】:

在运行时,您可以使用以下代码

btn.setBackgroundDrawable(null);

【讨论】:

btn.setBackgroundColor(Color.TRANSPARENT);适用于所有 API 级别 setBackgroundDrawable 已弃用,如 AlBeebe 上面所建议的那样使用 setbackGroundColor 此方法现已弃用【参考方案6】:

我认为接受的答案应该是: android:background="?attr/selectableItemBackground"

这与@lory105 的答案相同,但它使用支持库来实现最大兼容性(android: 等效项仅适用于 API >= 11)

【讨论】:

【参考方案7】:

如果您需要点击动画,请不要使用 null 或 transparent。更好:

//Rectangular click animation
android:background="?attr/selectableItemBackground"

//Rounded click animation
android:background="?attr/selectableItemBackgroundBorderless"

【讨论】:

【参考方案8】:

删除这一行:

android:background="@drawable/transparent">

在你的活动类集中

ImageButton btn = (ImageButton)findViewById(R.id.previous);
btn.setAlpha(100);

您可以将 alpha 级别设置为 0 到 255

o 表示透明,255 表示不透明。

【讨论】:

但这是否可以让按钮位于 SurfaceView 的顶部? 这个答案是错误的并且具有误导性,因为它使整个按钮半透明。如果希望从代码中执行此操作,则将 null 传递给 setBackground 方法。 setAlpha 不是你需要的。 它使整个视图透明。【参考方案9】:

最好的办法是使用透明色码

android:background="#00000000"

使用颜色代码#00000000 使任何东西透明

【讨论】:

@android:color/transparent 没有硬编码值。 不,应该首选引用值...但是 IMO,@Fred,即使将 @android: 引用直接放在布局中也被认为是硬编码值,因为如果你想改变它,你仍然必须在布局中冲浪以找到它。我会声明类似&lt;item name="something"&gt;@android:color/transparent&lt;/item&gt; 的内容并在布局中使用我自己的值,这样我就可以在我的 resources.xml 文件中轻松找到它并更改它而无需搜索它在布局中【参考方案10】:

使用ImageView...默认为透明背景...

【讨论】:

您可以将 ImageView 用作按钮。在您的 java 代码中,您只需说 ImageView previous = (ImageView) findViewById(R.id.previous);然后是 previous.setOnClickListener(new OnClickListenerpublic void onClick(/*当你触摸 ImageView*/));瞧!【参考方案11】:

我已经在背景中添加了一些东西,所以这个东西对我有用:

   android:backgroundTint="@android:color/transparent"

(Android Studio 3.4.1)

EDIT:仅适用于 android api level 21 及以上。为了兼容性,请改用它

   android:background="@android:color/transparent"

【讨论】:

【参考方案12】:

您可以通过将背景设置为透明来使用以下代码:

<ImageButton 
android:id="@+id/previous"
android:layout_
android:layout_
android:src="@drawable/media_skip_backward"
android:background="transparent"></ImageButton>

【讨论】:

【参考方案13】:

使用这个:

<ImageButton
 android:id="@+id/back"
 android:layout_
 android:layout_
 android:background="@null"
 android:padding="10dp"
 android:src="@drawable/backbtn" />

【讨论】:

【参考方案14】:

在 XML 中设置 ImageButton 的背景为@null

<ImageButton android:id="@+id/previous"
android:layout_
android:layout_
android:src="@drawable/media_skip_backward"
android:background="@null"></ImageButton>

【讨论】:

【参考方案15】:

使用 "@null" 。它对我有用。

<ImageButton
    android:layout_
    android:layout_
    app:srcCompat="@drawable/bkash"
    android:id="@+id/bid1"
    android:layout_alignParentTop="true"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    android:background="@null" />

【讨论】:

【参考方案16】:

我是android:background="@android:color/transparent"

<ImageButton
    android:id="@+id/imageButton"
    android:src="@android:drawable/ic_menu_delete"
    android:background="@android:color/transparent"
/>

【讨论】:

【参考方案17】:

它可以工作,并且还可以为单击的按钮保留视觉反馈,

android:backgroundTintMode="screen"

【讨论】:

【参考方案18】:

这是以编程方式将背景颜色设置为透明

 ImageButton btn=(ImageButton)findViewById(R.id.ImageButton01);
 btn.setBackgroundColor(Color.TRANSPARENT);

【讨论】:

【参考方案19】:

以编程方式可以通过以下方式完成:

image_button.setAlpha(0f) // to make it full transparent
image_button.setAlpha(0.5f) // to make it half transparent
image_button.setAlpha(0.6f) // to make it (40%) transparent
image_button.setAlpha(1f) // to make it opaque

【讨论】:

我不是反对者,但这似乎使整个图像透明,而不仅仅是背景。 @threed 我知道,这正是 OP 在他的问题中提出的问题,“透明的 ImageButton”。 你说得对,OP要求一个透明按钮。但他的例子表明他可能想要一个具有透明背景的按钮(例如android:background="@drawable/transparent")。无论哪种方式,我只是提出了一个可能的反对理由;我不是说这是合理的。 @threed 好吧,可能就是这个原因,谢谢。【参考方案20】:

在您的 XML 中将 Background 属性设置为任何颜色 White(#FFFFFF) 阴影或 Black(#000000) 阴影。如果您想要透明度,只需在实际哈希码前加上 80。

#80000000   

【讨论】:

【参考方案21】:
<ImageButton
    android:id="@+id/previous"
    android:layout_
    android:layout_
    android:background="@drawable/media_skip_backward">
</ImageButton>

我为ImageButton 使用了透明的png,并且ImageButton 有效。

【讨论】:

这不是一个好的解决方案..使用Android API提供的正确属性!阅读我的回答。 这将导致另一个图层,添加到过度绘制。

以上是关于如何拥有透明的 ImageButton:Android的主要内容,如果未能解决你的问题,请参考以下文章

android 设置Button或者ImageButton的背景透明

android 设置Button或者ImageButton的背景透明

Android ImageButton 背景颜色

android开发笔记如何让ImageButton去掉白色边框和让ImageButton具有点击效果

android动态添加ImageButton的去边框办法

Button和ImageButton