วิธีการใช้ ImageButton แบบโปร่งใส: Android


493
<ImageButton android:id="@+id/previous"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/media_skip_backward"
android:background="@drawable/transparent"></ImageButton>

นี่คือสิ่งที่ฉันพยายามรับ ImageButton แบบโปร่งใสเพื่อวางปุ่มเหล่านั้นบน SurfaceView แต่ Eclipse ให้ข้อผิดพลาดในโครงการทันทีที่ฉันรวมบรรทัดโปร่งใสใน xml

กรุณาช่วย.


3
แค่หมายเหตุด้าน: แทนภาพโปร่งใสของคุณเองโดยทั่วไปคุณสามารถใช้ @android: color / transparent - ไม่จำเป็นต้องใช้รูปภาพโปร่งใสที่กำหนดเองของคุณเอง
Mathias Conradt

6
โปรดทราบว่าด้วยการให้พื้นหลังโปร่งใสกับปุ่มรูปภาพคุณกำลังลบความคิดเห็นด้วยภาพสำหรับสถานะการคลิกปุ่ม (และอาจปิดใช้งาน) ส่งผลให้การใช้งานลดลงเล็กน้อย
szeryf

เพื่อให้แน่ใจว่า ImageButton ได้รับการวางบน SurfaceView จริง ๆ แล้วมันมีประโยชน์ที่จะเรียก previousButton.bringToFront () มิฉะนั้นอาจถูกซ่อนอยู่หลัง SurfaceView
Jay Snayder

API Android ให้คุณสมบัติที่ถูกต้องในการสร้างพื้นหลังโปร่งใสโดยไม่สูญเสียการตอบสนองต่อภาพสำหรับปุ่มคลิกหรือรัฐอื่น ๆ ! อ่านคำตอบของฉันด้านล่าง!
lory105

คำตอบ:


984

ลองใช้ null สำหรับพื้นหลัง ...

android:background="@null"

ขอบคุณ. วิธีนี้ใช้ได้ผล มีเพียงรูปภาพเท่านั้นที่เห็นและไม่ได้ล้อมกรอบไว้ แต่ฉันสามารถวางปุ่มนี้เหนือ SurfacaView หรือดูตัวอย่างวิดีโอได้หรือไม่? เป็นไปได้ไหม ฉันต้องทำอย่างไร?
Namratha

1
@Namratha SurfaceViewควรอนุญาตให้คุณกดปุ่มบนพื้นผิว แต่หมายเหตุ: "สามารถใช้เพื่อวางซ้อนทับเช่นปุ่มที่ด้านบนของ Surface แม้ว่าจะทราบว่ามันสามารถส่งผลกระทบต่อประสิทธิภาพการทำงานตั้งแต่การผสมอัลฟาเต็มรูปแบบ คอมโพสิตจะดำเนินการทุกครั้งที่การเปลี่ยนแปลงของ Surface " จากdeveloper.android.com/reference/android/view/SurfaceView.html
Quintin Robinson

57
มันไม่ถูกต้องที่จะใช้พื้นหลังเป็นโมฆะ !! API Android ให้คุณสมบัติที่ถูกต้องในการสร้างพื้นหลังโปร่งใสโดยไม่สูญเสียการตอบสนองต่อภาพสำหรับปุ่มคลิกหรือรัฐอื่น ๆ ! อ่านคำตอบของฉันด้านล่าง!
lory105

1
การตั้งค่าพื้นหลังปุ่มเป็นโมฆะไม่ใช่ความคิดที่ดีดังกล่าวข้างต้นและด้านล่าง คำตอบที่มีการใช้คุณลักษณะที่เหมาะสมนั้นดีกว่ามากหรือสร้างตัวเลือกที่ถูกต้องโปร่งใสสำหรับคำติชมที่ไม่ได้คลิกและเหมาะสมเมื่อคลิก
Damian Walczak

นั่นทำให้ฉันมีข้อผิดพลาด .. แต่สิ่งนี้ได้ผลสำหรับฉัน android: background = "@ android: color / transparent"
Juan Mendez

303

อย่าใช้เลย์เอาต์หรือว่างเพราะปุ่ม (หรือมุมมองทั่วไป) จะไม่เน้นอีกต่อไปเมื่อคลิก !!!

ฉันมีปัญหาเดียวกันและในที่สุดฉันก็พบแอตทริบิวต์ที่ถูกต้องจาก Android APIเพื่อแก้ปัญหา มันสามารถใช้กับทุกมุมมอง

ใช้สิ่งนี้ในข้อกำหนดปุ่ม:

android:background="?android:selectableItemBackground"

4
ต้องใช้ API 11 - คุณสามารถกำจัดโทรศัพท์ 24% ในป่า (ตั้งแต่เดือนมกราคม 2014)
Shaun Neal

8
ดูเหมือนว่าการใช้ไลบรารีการสนับสนุนความต้องการของ API> = 11 อาจเอาชนะstackoverflow.com/questions/19714682/…
ใครสักคนที่ไหนสักแห่ง

15
สำหรับเอฟเฟกต์แบบวงกลมให้ใช้android:background="?android:selectableItemBackgroundBorderless"
Mateus Gondim

7
โชคดีที่ในปี 2019 สิ่งนี้ช่วยลดโทรศัพท์ประมาณ 0% ในป่า
user1032613

140

คุณยังสามารถใช้สีโปร่งใส:

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

9
@Geykel, @Adam คุณควรทราบว่าแอตทริบิวต์นี้ค่อนข้างอันตรายเมื่อใช้โดยไม่มีเงื่อนไขเนื่องจากมันจะเพิ่มเลเยอร์โปร่งใสอีกอันที่จะถูกวาดลงบนหน้าจอและอาจส่งผลให้พิกเซลที่ใช้ออกมาช้า เพื่อทดสอบว่าคุณสามารถใช้Developer option: Show GPU overdrawและเห็นความแตกต่างระหว่างการตั้งค่าพื้นหลังและ@null @android:color/transparent
amirlazarovich

นี่คือคำตอบที่ดีที่สุดและมีประสิทธิภาพที่สุด :)
Juan Mendez

112

การตั้งค่าพื้นหลังเป็น"@null"จะทำให้ปุ่มไม่มีผลเมื่อคลิก นี่จะเป็นทางเลือกที่ดีกว่า

style="?android:attr/borderlessButtonStyle"

หลังจากนั้นฉันก็พบว่าการใช้

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

ยังเป็นทางออกที่ดี และคุณสามารถสืบทอดคุณลักษณะนี้ในสไตล์ของคุณเอง


ไม่ทำงานสำหรับฉันและอันที่สองทำให้แอปขัดข้อง บางทีฉันอาจจะผิดพลาด แต่ฉันก็ไม่รู้อะไร
Yannis Dran

5
ต้องใช้ API ระดับ 11 ที่มา
Jason Robinson

2
นี่คือคำตอบที่ถูกต้อง นอกจากนี้การใช้ AppCompact ด้วยคำตอบนี้เอฟเฟกต์คลื่นจะทำงานได้อย่างสมบูรณ์แบบและในวันที่ 19 เมษายนเอฟเฟกต์แบบกดปกติจะทำงานนอกกรอบ android: background = "? android: attr / selectableItemBackground" ยอดเยี่ยม!
Raffaeu

วิธีการแก้ปัญหานี้selectableItemBackgroundมีประโยชน์เพิ่มเติมในการกำหนดสถานะการเปลี่ยนปุ่มเมื่อคลิก โซลูชันอื่น ๆ ทำให้ปุ่มไม่สามารถคลิกได้
IgorGanapolsky

14

ในเวลาทำงานคุณสามารถใช้รหัสต่อไปนี้

btn.setBackgroundDrawable(null);

8
btn.setBackgroundColor (Color.TRANSPARENT); ใช้งานได้กับทุกระดับ API
AlBeebe

setBackgroundDrawable เลิกใช้ setbackGroundColor ตามที่แนะนำข้างต้นโดย AlBeebe
bhaskarc

วิธีนี้เลิกใช้แล้ว
Ray Kiddy

11

ฉันเชื่อว่าคำตอบที่ยอมรับควรเป็น: android:background="?attr/selectableItemBackground"

นี่เป็นเหมือนกับคำตอบของ @ lory105 แต่ใช้ไลบรารีการสนับสนุนเพื่อความเข้ากันได้สูงสุด ( android:เทียบเท่าใช้ได้กับ API> = 11 เท่านั้น)


8

ลบบรรทัดนี้:

android:background="@drawable/transparent">

และในชุดกิจกรรมของคุณ

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

คุณสามารถตั้งค่าระดับอัลฟา 0 ถึง 255

o หมายถึงโปร่งใสและ 255 หมายถึงทึบแสง


แต่สิ่งนี้ช่วยให้ปุ่มวางบน SurfaceView หรือไม่?
Namratha

5
คำตอบนี้ผิดและทำให้เข้าใจผิดเนื่องจากทำให้ปุ่มกึ่งทึบแสงทั้งหมด หากต้องการทำสิ่งนี้จากโค้ดให้ส่งค่า null ไปยังเมธอด setBackground setAlpha ไม่ใช่สิ่งที่คุณต้องการ
Quintin Willison

มันทำให้มุมมองทั้งหมดโปร่งใส
ราชา

5

วิธีที่ดีที่สุดคือการใช้รหัสสีโปร่งใส

android:background="#00000000"

ใช้รหัสสี # 00000000 เพื่อทำให้ทุกอย่างโปร่งใส


4
@android:color/transparentไม่มีค่าตายตัว
Fred

1
ไม่ควรใช้ค่าอ้างอิง ... แต่ IMO, @Fred แม้การ@android:อ้างอิงโดยตรงในโครงร่างจะถือเป็นค่าฮาร์ดโค้ดเพราะถ้าคุณต้องการเปลี่ยนคุณยังต้องท่องในโครงร่างเพื่อค้นหา ฉันจะประกาศบางอย่างเช่นนี้<item name="something">@android:color/transparent</item>และใช้ค่าของฉันเองในการจัดวางเพื่อให้ฉันสามารถค้นหาได้ง่ายในไฟล์resources.xmlของฉันและเปลี่ยนแปลงโดยไม่ต้องค้นหาในรูปแบบ
Cliff Burton

2

ใช้ImageView... มันมีพื้นหลังโปร่งใสตามค่าเริ่มต้น ...


3
แต่มันไม่ใช่ปุ่ม
Moesio

2
คุณสามารถใช้ ImageView เป็นปุ่ม ในโค้ดจาวาของคุณคุณเพียงแค่พูดว่า ImageView previous = (ImageView) findViewById (R.id.previous); และจากนั้น previous.setOnClickListener (ใหม่ OnClickListener {โมฆะสาธารณะ onClick (/ * สิ่งนี้เกิดขึ้นเมื่อคุณสัมผัส ImageView * /)}); Voila!
marienke

2

ฉันได้เพิ่มบางสิ่งลงในพื้นหลังแล้วสิ่งนี้ใช้ได้กับฉัน

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

(Android Studio 3.4.1)

แก้ไข : ใช้งานได้เฉพาะบน Android api ระดับ 21 ขึ้นไป เพื่อความเข้ากันได้ใช้สิ่งนี้แทน

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

1

ใช้สิ่งนี้:

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

1

ตั้งพื้นหลังของ ImageButton เป็น @null ใน XML

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

1

ใช้"@null" มันใช้งานได้สำหรับฉัน

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

1

มัน android:background="@android:color/transparent"

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

0

นี่คือการตั้งค่าสีพื้นหลังโดยทางโปรแกรมเป็นแบบโปร่งใส

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

0

โดยทางโปรแกรมสามารถทำได้โดย:

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

ฉันไม่ได้เป็นนักลงคะแนนเสียง แต่ดูเหมือนจะทำให้ภาพทั้งหมดโปร่งใสไม่ใช่แค่พื้นหลัง
เทรเวอร์

@ เห็นด้วยฉันรู้และนั่นคือสิ่งที่ OP ขอใน ques ของเขา "ImageButton โปร่งใส"
Muhammed Refaat

1
คุณพูดถูกแล้ว OP ขอปุ่มโปร่งใส แต่ตัวอย่างของเขาแสดงให้เห็นว่าเขาอาจต้องการขอปุ่มที่มีพื้นหลังโปร่งใส (เช่นandroid:background="@drawable/transparent") ไม่ว่าจะด้วยวิธีใดฉันแค่แนะนำเหตุผลที่เป็นไปได้สำหรับการโหวต ฉันไม่ได้บอกว่ามันเป็นธรรม
เทรเวอร์

1
@ เห็นด้วยเป็นอย่างดีอาจเป็นเหตุผลสำหรับมันขอบคุณใด ๆ
Muhammed Refaat

0

ในBackgroundแอตทริบิวต์ชุด XML ของคุณเป็นWhite(#FFFFFF)เฉดสีหรือเฉดสีใด ๆBlack(#000000)ถ้าคุณต้องการความโปร่งใสเพียงใส่ 80 ก่อนรหัสแฮชจริง

#80000000   

-2
<ImageButton
    android:id="@+id/previous"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@drawable/media_skip_backward">
</ImageButton>

ฉันใช้ความโปร่งใสpngสำหรับImageButtonและการImageButtonทำงาน


นี่ไม่ใช่ทางออกที่ดี .. ใช้คุณลักษณะที่ถูกต้องที่ได้รับจาก Android API! อ่านคำตอบของฉัน
lory105

ซึ่งจะส่งผลให้เลเยอร์อื่นเพิ่มเพื่อถอนเงินเกิน
tir38
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.