투명한 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>

이것이 SurfaceView에 해당 버튼을 배치하기 위해 투명한 ImageButton을 얻으려고했던 것입니다. 그러나 Eclipse는 XML에 투명 선을 포함하자마자 프로젝트에서 오류를 발생시킵니다.

도와주세요.


3
참고 : 투명 이미지 대신 @android : color / transparent를 사용할 수도 있습니다. 사용자 정의 투명 이미지가 필요하지 않습니다.
Mathias Conradt

6
이미지 버튼에 투명한 배경을 주면 버튼 클릭 (및 아마도 비활성화) 상태에 대한 시각적 피드백이 제거됩니다. 이로 인해 사용성이 약간 떨어집니다.
szeryf

ImageButton이 실제로 SurfaceView에 배치되도록하려면 previousButton.bringToFront ()를 호출하는 것이 유용합니다. 그렇지 않으면 SurfaceView 뒤에 숨겨져있을 수 있습니다.
Jay

Android API는 버튼 클릭이나 다른 상태에 대한 시각적 피드백을 잃지 않으면 서 투명한 배경을 만들 수있는 올바른 속성을 제공합니다! 아래 답변을 읽으십시오!
lory105

답변:


984

배경에 null을 사용해보십시오 ...

android:background="@null"

감사합니다. 작동합니다. 이미지 만 보이고 주변 상자는 보이지 않습니다. 그러나이 버튼을 SurfacaView, 즉 비디오 미리보기 위에 놓을 수 있습니까? 이것이 가능한가? 어떻게합니까?
Namratha

1
@Namratha 이렇게 SurfaceView하면 표면 위에 버튼을 배치 할 수 있지만 다음과 같이 참고하십시오. "이 버튼을 사용하면 표면 위에 버튼과 같은 오버레이를 배치 할 수 있지만 전체 알파 혼합 이후 성능에 영향을 줄 수 있습니다. Surface가 변경 될 때마다 합성이 수행됩니다. " 에서 developer.android.com/reference/android/view/SurfaceView.html
Quintin 님 로빈슨

57
null 배경을 사용하는 것은 올바르지 않습니다 !! Android API는 버튼 클릭이나 다른 상태에 대한 시각적 피드백을 잃지 않으면 서 투명한 배경을 만들 수있는 올바른 속성을 제공합니다! 아래 답변을 읽으십시오!
lory105

1
위와 아래에서 언급했듯이 버튼 배경을 null로 설정하는 것은 좋지 않습니다. 적절한 속성을 사용하여 답변하는 것이 훨씬 낫거나 클릭 할 때 클릭하지 않고 적절한 피드백을 위해 투명한 선택기를 만듭니다.
데미안 발자크

그것은 나에게 오류를 주었다 .. 그러나 이것은 나를 위해 android : background = "@ android : color / transparent"일했다
Juan Mendez

303

버튼 또는 일반보기가 클릭시 더 이상 강조 표시되지 않으므로 TRANSAPENT 또는 NULL LAYOUT을 사용하지 마십시오 !!!

나는 같은 문제가 있었고 마침내 안드로이드 API 에서 문제를 해결하기 위해 올바른 속성을 찾았습니다 . 모든보기에 적용 할 수 있습니다.

버튼 사양에서 이것을 사용하십시오.

android:background="?android:selectableItemBackground"

4
API 11이 필요합니다. 야생에서 전화의 24 %를 제거합니다 (2014 년 1 월 기준)
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를 사용하면 리플 효과가 완벽하게 작동하고 API 19에서 일반 누르면 효과가 즉시 작동합니다. android : background = "? android : attr / selectableItemBackground"훌륭합니다!
Raffaeu

이 솔루션은 selectableItemBackground버튼을 클릭 할 때 상태를 변경하는 이점이 있습니다. 다른 솔루션은 버튼을 클릭 할 수없는 것처럼 보이게합니다.
IgorGanapolsky 2016 년

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
이 대답은 전체 버튼을 반투명하게 만들기 때문에 잘못되어 오도됩니다. 코드에서이를 수행하려면 setBackground 메소드에 널을 전달하십시오. setAlpha는 필요한 것이 아닙니다.
Quintin Willison

전체보기를 투명하게 만듭니다.
Raj

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 (new OnClickListener {public void onClick (/ * ImageView를 터치하면 발생합니다 * /)}); 짜잔!
marienke

2

나는 이미 배경에 무언가를 추가하고 있었기 때문에이 일은 나를 위해 일했다.

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

(Android Studio 3.4.1)

편집 : 안드로이드 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

XML에서 ImageButton의 배경을 @null로 설정

<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

나는 downvoter는 아니지만 배경뿐만 아니라 전체 이미지를 투명하게 만듭니다.
Trevor

@threed 내가 아는 바로 그의 질문에 "투명한 ImageButton"이라고 묻는 OP입니다.
Muhammed Refaat

1
OP는 투명 버튼을 요구했습니다. 그러나 그의 예는 그가 투명한 배경을 가진 버튼 (예 :)을 요청했을 수도 있다고 제안합니다 android:background="@drawable/transparent". 어느 쪽이든, 나는 downvote에 대한 가능한 이유를 제안하고 있습니다. 나는 그것이 정당하다고 말하는 것이 아닙니다.
Trevor

1
@ threed 음, 그 이유 일 수 있습니다. 어쨌든 감사합니다.
Muhammed Refaat

0

XML에서 Background속성을 모든 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에서 제공하는 올바른 속성을 사용하십시오! 내 answare를 읽으십시오.
lory105

그러면 다른 레이어가 생겨 오버 드로우가 추가됩니다.
tir38
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.