在Android中以编程方式删除背景可绘制


128

我想以@drawable/bg编程方式删除背景可绘制。有没有办法做到这一点?

当前,我的布局中包含以下XML:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    android:id="@+id/widget29"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:background="@drawable/bg">

</RelativeLayout>

Answers:


316

试试这个

RelativeLayout relative = (RelativeLayout) findViewById(R.id.widget29);
relative.setBackgroundResource(0);

检查RelativeLayout文档中的setBackground函数


4
我收到此错误:类型为View的setBackgroundResource(int)方法不适用于参数(空)
UKDataGeek 2012年

2
如果不起作用:检查您是否使用了background属性,而不是android:src!
克里斯·康威

3
setBackgroundDrawable现在已弃用。@Suraj在下面的回答现在更好。
阿南德·塞纳斯

6
API 16?api 8有什么用吗?
user1940676

1
使用setBackgroundResource(0)。由@AdamStelmaszczyk回答。,
Zar E Ahmer 2014年

70

setBackgroundResource(0)是最好的选择。从文档中

将背景设置为给定的资源。资源应引用Drawable对象或0以删除背景

它适用于任何地方,因为它自API 1起。

setBackground是在API 16中添加的很晚,因此如果您的minSdkVersion年龄低于16,则它将无法使用。


2
谢谢,在经过四个小时的猛烈撞击之后,完全救了我。如果您在onClick事件中动态创建一个切换按钮(选择了2个可绘制对象),但是在接管切换按钮之前需要显示一个可见按钮,这非常有用(因为在click事件发生之前不会显示任何内容)确实,您可以使用它setBackgroundResource(0)来删除您之前绘制的“设置”按钮)。
Azurespot 2014年

2
这应该是选择的答案,因为从内存管理和api级别支持角度来看,这都是最佳解决方案。
gregtczap 2014年

47

这帮助我消除了背景色,希望对您有所帮助。 setBackgroundColor(Color.TRANSPARENT)


3
可绘制对象可以具有填充,因此,如果您删除背景,则也需要删除填充。
米哈尔Kisiel的

1
setBackgroundResource(0)是最佳选择,因为它可以完全删除背景,从而减少过度绘制。
米兰

4

试试这个代码:

imgView.setImageResource(android.R.color.transparent); 

也是这个作品:

imgView.setImageResource(0); 

但请注意,这不起作用:

imgView.setImageResource(null); 

4

我在android 4+中尝试以下代码:

view.setBackgroundDrawable(0);

View类型的setBackgroundDrawable(Drawable)方法不适用于参数(int)
Tobrun

2

此方法的最佳性能:

imageview.setBackgroundResource(R.drawable.location_light_green);

用这个。



0

用于setBackgroundColor(Color.TRANSPARENT)将背景设置为透明,或使用setBackgroundColor(0)。这Color.TRANSPARENT是颜色类的默认属性。它将正常工作。


0

我有一个案例场景,我尝试了上面所有的答案,但是总是在旧的图像之上创建新的图像。对我有用的解决方案是:

imageView.setImageResource(R.drawable.image);

0

除了出色的答案,如果您想通过xml实现此目标,则可以添加:

android:background="@android:color/transparent

在您看来。


0

首先,您必须以XML布局编写:

android:visibility="invisible" <!--or set VISIBLE-->

然后使用Java来显示它:

myimage.setVisibility(SHOW); //HIDE

它是什么?做什么的?
CoolMind
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.