ลบพื้นหลัง drawable โดยทางโปรแกรมใน Android


128

ฉันต้องการที่จะลบพื้นหลัง drawable โดยทาง@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>

คำตอบ:


316

ลองสิ่งนี้

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

ตรวจสอบฟังก์ชั่น setBackground ในเอกสารประกอบ RelativeLayout


4
ฉันได้รับข้อผิดพลาดนี้: วิธี setBackgroundResource (int) ในประเภทมุมมองไม่สามารถใช้กับอาร์กิวเมนต์ (null)
UKDataGeek

2
ในกรณีที่ใช้งานไม่ได้: ตรวจสอบว่าคุณใช้คุณสมบัติพื้นหลังไม่ใช่ Android: src!
Chris Conway

3
setBackgroundDrawable เลิกใช้แล้ว @ คำตอบของ Suraj ด้านล่างดีกว่าตอนนี้
Anand Sainath

6
API 16 API 8 มีอะไรบ้าง?
user1940676

1
ใช้ setBackgroundResource (0) ตอบโดย @AdamStelmaszczyk ,
Zar E Ahmer

70

setBackgroundResource(0)เป็นตัวเลือกที่ดีที่สุด จากเอกสาร :

ตั้งค่าพื้นหลังเป็นทรัพยากรที่กำหนด ทรัพยากรที่ควรดูวัตถุ Drawable หรือ0 ถึงลบพื้นหลัง

ใช้งานได้ทุกที่เพราะเป็น API 1

setBackgroundถูกเพิ่มในภายหลังใน API 16 ดังนั้นจะไม่ทำงานหากคุณminSdkVersionต่ำกว่า 16


2
ขอบคุณฉันช่วยชีวิตฉันไว้ได้อย่างสมบูรณ์หลังจาก 4 ชั่วโมงของการต่อสู้หัว สิ่งนี้มีประโยชน์มากในกรณีที่คุณสร้างปุ่มสลับ (เลือกได้ 2 drawable) ในเหตุการณ์ onClick แต่ต้องมีปุ่มที่มองเห็นได้เพื่อแสดงก่อนที่จะเปิดใช้งาน toggled (เพราะไม่มีอะไรจะแสดงจนกระทั่งเหตุการณ์คลิกเกิดขึ้นดังนั้นเมื่อมัน คุณสามารถใช้setBackgroundResource(0)เพื่อลบปุ่ม "set" ก่อนหน้านี้ได้)
Azurespot

2
นี่ควรเป็นคำตอบที่เลือกเพราะมันเป็นทางออกที่ดีที่สุดทั้งในแง่ของการจัดการหน่วยความจำและการสนับสนุนระดับ API
gregtczap

47

สิ่งนี้ช่วยฉันลบสีพื้นหลังหวังว่าจะช่วยใครซักคน setBackgroundColor(Color.TRANSPARENT)


3
Drawables อาจมีช่องว่างภายในดังนั้นหากคุณลบพื้นหลังคุณต้องลบช่องว่างภายในด้วย
Michał Kisiel

1
setBackgroundResource (0) เป็นตัวเลือกที่ดีที่สุดเพราะจะลบพื้นหลังอย่างสมบูรณ์จึงลดการถอน
มิลาน

4

ลองรหัสนี้:

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

หนึ่งนี้ยังใช้งานได้:

imgView.setImageResource(0); 

แต่ระวังสิ่งนี้ไม่ทำงาน:

imgView.setImageResource(null); 

4

ฉันลองรหัสนี้ในAndroid 4+ :

view.setBackgroundDrawable(0);

เมธอด 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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.