如何拥有透明的 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 上,即放在视频预览上吗?这可能吗?我该怎么做? @NamrathaSurfaceView
应该允许您将按钮放在表面上,但请注意:“这可用于在表面上放置按钮等覆盖层,但请注意它可以对性能有影响,因为每次 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:
引用直接放在布局中也被认为是硬编码值,因为如果你想改变它,你仍然必须在布局中冲浪以找到它。我会声明类似<item name="something">@android:color/transparent</item>
的内容并在布局中使用我自己的值,这样我就可以在我的 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的背景透明