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