Cách có ImageButton trong suốt: 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>

Đây là những gì tôi đã cố gắng để có được một ImageButton trong suốt để đặt các nút đó trên SurfaceView. Nhưng Eclipse, cho tôi một lỗi trong dự án ngay khi tôi đưa dòng trong suốt vào xml.

Xin vui lòng giúp đỡ.


3
chỉ là một lưu ý phụ: thay vì hình ảnh trong suốt của riêng bạn, bạn thường chỉ có thể sử dụng @android: màu sắc / trong suốt - không cần hình ảnh trong suốt tùy chỉnh của riêng bạn
Mathias Conradt

6
Xin lưu ý rằng bằng cách cung cấp cho nút hình ảnh một nền trong suốt, bạn đang xóa phản hồi trực quan cho trạng thái được nhấp vào nút (và có thể bị vô hiệu hóa). Điều này dẫn đến việc giảm nhẹ khả năng sử dụng.
szeryf

Để chắc chắn rằng ImageButton thực sự được đặt trên SurfaceView, cũng rất hữu ích khi gọi trướcButton.bringToFront (), nếu không nó vẫn có thể bị ẩn đằng sau SurfaceView
Jay Snayder

API Android cung cấp thuộc tính chính xác để tạo nền trong suốt mà không làm mất phản hồi trực quan cho nút được nhấp hoặc cho các trạng thái khác! Đọc câu trả lời của tôi dưới đây!
lory105

Câu trả lời:


984

Hãy thử sử dụng null cho nền ...

android:background="@null"

Cảm ơn bạn. Những công việc này. Chỉ có hình ảnh được nhìn thấy và không phải là hộp xung quanh nó. Nhưng tôi có thể đặt nút này trên SurfacaView tức là qua phần xem trước video không? Điều này có thể không? Tôi phải làm nó như thế nào?
Namratha

1
@Namratha SurfaceViewNên cho phép bạn làm mờ các nút trên một bề mặt nhưng lưu ý: "Điều này có thể được sử dụng để đặt các lớp phủ như các nút trên bề mặt, mặc dù lưu ý rằng nó có thể có tác động đến hiệu suất do được trộn hoàn toàn alpha hỗn hợp sẽ được thực hiện mỗi khi Surface thay đổi. " từ developer.android.com/reference/android/view/SurfaceView.html
Quintin Robinson

57
Không đúng khi sử dụng nền null !! API Android cung cấp thuộc tính chính xác để tạo nền trong suốt mà không làm mất phản hồi trực quan cho nút được nhấp hoặc cho các trạng thái khác! Đọc câu trả lời của tôi dưới đây!
lory105

1
Đặt nền nút thành null không phải là ý kiến ​​hay, như đã đề cập ở trên và bên dưới. Câu trả lời với việc sử dụng các thuộc tính phù hợp sẽ tốt hơn rất nhiều hoặc tạo bộ chọn chính xác với độ trong suốt cho phản hồi không nhấp và phù hợp khi nhấp.
Damian Walczak

Điều đó đã gây ra lỗi cho tôi .. Nhưng điều này hiệu quả với tôi android: background = "@ android: color / minh bạch"
Juan Mendez

303

KHÔNG SỬ DỤNG MỘT TRANSAPENT HOẶC NULL LAYOUT vì sau đó nút (hoặc chế độ xem chung) sẽ không còn nổi bật hơn khi nhấp !!!

Tôi đã có cùng một vấn đề và cuối cùng tôi đã tìm thấy thuộc tính chính xác từ API Android để giải quyết vấn đề. Nó có thể áp dụng cho bất kỳ xem.

Sử dụng điều này trong thông số kỹ thuật của nút:

android:background="?android:selectableItemBackground"

4
Điều này yêu cầu API 11 - bạn loại bỏ 24% số điện thoại trong tự nhiên (kể từ tháng 1 năm 2014)
Shaun Neal

8
Có vẻ như bằng cách sử dụng thư viện Hỗ trợ, yêu cầu API> = 11 có thể được khắc phục stackoverflow.com/questions/19714682/ợi
Ai đó ở đâu đó vào

15
Để có hiệu ứng gợn tròn, hãy sử dụngandroid:background="?android:selectableItemBackgroundBorderless"
Mateus Gondim

7
May mắn là vào năm 2019, điều này giúp loại bỏ khoảng 0% điện thoại trong tự nhiên.
dùng1032613

140

Bạn cũng có thể sử dụng màu trong suốt:

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

9
@Geykel, @Adam, bạn nên biết rằng thuộc tính này khá nguy hiểm khi được sử dụng vô điều kiện vì nó sẽ thêm một lớp trong suốt khác sẽ bị hút vào màn hình và có thể dẫn đến việc rút quá nhiều pixel và làm chậm ứng dụng của bạn. Để kiểm tra nó, bạn có thể sử dụng Developer option: Show GPU overdrawvà xem sự khác biệt giữa cài đặt nền @null@android:color/transparent.
amirlazarovich

Đây là câu trả lời tốt nhất và hiệu quả nhất. :)
Juan Mendez

112

Đặt nền thành "@null"sẽ làm cho nút không có hiệu lực khi nhấp vào. Đây sẽ là một lựa chọn tốt hơn.

style="?android:attr/borderlessButtonStyle"

Sau này tôi thấy rằng sử dụng

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

cũng là một giải pháp tốt Và bạn có thể kế thừa thuộc tính này theo phong cách của riêng bạn.


không làm việc cho tôi và cái thứ hai làm cho ứng dụng bị sập. Có lẽ tôi đã làm sai nhưng tôi không biết gì.
Yannis Dran

5
Yêu cầu API cấp 11. Nguồn
Jason Robinson

2
Đây là câu trả lời chính xác. Cũng sử dụng AppCompact, với câu trả lời này, hiệu ứng gợn hoạt động hoàn hảo và trên api 19, hiệu ứng nhấn bình thường hoạt động vượt trội. android: nền = "? android: attr / selectableItemBackground" Rực rỡ!
Raffaeu 28/03/2015

Giải pháp selectableItemBackgroundnày có thêm một lợi ích là làm cho các trạng thái thay đổi nút khi nhấp vào. Các giải pháp khác làm cho nút xuất hiện không thể nhấp.
IgorGanapolsky

14

trong thời gian chạy, bạn có thể sử dụng mã sau

btn.setBackgroundDrawable(null);

8
btn.setBackgroundColor (Color.TRANSPARENT); Hoạt động trên tất cả các cấp API
AlBeebe

setBackgroundDrawable không được dùng nữa, hãy sử dụng setbackGroundColor như được đề xuất ở trên bởi AlBeebe
bhaskarc 24/12/13

phương pháp này hiện không được chấp nhận
Ray Kiddy

11

Tôi tin rằng câu trả lời được chấp nhận nên là: android:background="?attr/selectableItemBackground"

Đây giống như câu trả lời của @ lory105 nhưng nó sử dụng thư viện hỗ trợ để tương thích tối đa ( android:tương đương chỉ có sẵn cho API> = 11)


8

Xóa dòng này:

android:background="@drawable/transparent">

Và trong lớp hoạt động của bạn được thiết lập

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

Bạn có thể đặt mức alpha 0 đến 255

o có nghĩa là trong suốt và 255 có nghĩa là mờ đục.


Nhưng điều này có cho phép nút nằm trên SurfaceView không?
Namratha

5
Câu trả lời này là sai và gây hiểu nhầm vì nó làm cho toàn bộ nút bán mờ. Nếu muốn làm điều này từ mã thì truyền null cho phương thức setBackground. setAlpha không phải là thứ bạn cần.
Quintin Willison

Nó làm cho toàn bộ quan điểm minh bạch.
Raj

5

Cách tốt nhất là sử dụng mã màu trong suốt

android:background="#00000000"

sử dụng mã màu # 00000000 để làm cho mọi thứ trong suốt


4
@android:color/transparentkhông có giá trị mã hóa cứng.
Fred

1
Không, giá trị tham chiếu nên được ưu tiên ... nhưng IMO, @Fred, thậm chí đặt @android:tham chiếu trực tiếp vào bố cục được coi là giá trị được mã hóa cứng vì nếu bạn muốn thay đổi, bạn vẫn phải lướt trong bố cục để tìm nó. Tôi sẽ khai báo một cái gì đó như thế này <item name="something">@android:color/transparent</item>và sử dụng giá trị của riêng tôi trong bố cục để tôi có thể dễ dàng tìm thấy nó trong tệp resource.xml của mình và thay đổi nó mà không phải tìm kiếm theo bố cục
Cliff Burton

2

Sử dụng ImageView... nó có nền trong suốt theo mặc định ...


3
Nhưng đó không phải là một nút
Moesio

2
Bạn có thể sử dụng ImageView làm nút. Trong mã java của bạn, bạn chỉ cần nói ImageView trước = (ImageView) findViewById (R.id.preingly); và trước đó.setOnClickListener (OnClickListener mới {public void onClick (/ * điều này xảy ra khi bạn chạm vào ImageView * /)}); Voila!
marienke

2

Tôi đã thêm một cái gì đó vào nền vì vậy, Điều này làm việc cho tôi:

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

(Studio Android 3.4.1)

EDIT : chỉ hoạt động trên Android api cấp 21 trở lên. để tương thích, sử dụng cái này thay thế

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

1

Dùng cái này:

<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

Đặt nền của ImageButton là @null trong 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

Sử dụng "@null" . Nó làm việc cho tôi.

<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

nó là android:background="@android:color/transparent"

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

0

Đây là chương trình đặt màu nền là trong suốt

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

0

Có thể lập trình bằng cách:

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

Tôi không phải là downvoter, nhưng điều này dường như làm cho toàn bộ hình ảnh trong suốt, không chỉ là nền.
Trevor

@threed Tôi biết, và đó chính xác là OP hỏi trong câu hỏi của anh ấy, "một ImageButton trong suốt".
Muhammed Refaat

1
Bạn hoàn toàn đúng, OP yêu cầu một nút trong suốt. Nhưng ví dụ của anh ta cho thấy rằng anh ta có thể có ý định yêu cầu một nút có nền trong suốt (ví dụ android:background="@drawable/transparent"). Dù bằng cách nào, tôi chỉ đề xuất một lý do có thể cho downvote; Tôi không nói rằng nó hợp lý.
Trevor

1
@threed tốt, có thể đó là lý do cho nó, cảm ơn bạn bằng mọi cách.
Muhammed Refaat

0

Trong Backgroundthuộc tính bộ XML của bạn thành bất kỳ sắc White(#FFFFFF)thái màu hoặc sắc thái nào. Black(#000000)Nếu bạn muốn độ trong suốt chỉ cần đặt 80 trước mã băm thực tế.

#80000000   

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

Tôi đã sử dụng một minh bạch png cho ImageButton, và ImageButtonlàm việc.


Đây không phải là một giải pháp tốt .. sử dụng đúng thuộc tính được cung cấp bởi API Android! Đọc phần mềm của tôi.
lory105

Điều này sẽ dẫn đến một lớp khác, thêm vào để rút tiền.
tir38
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.