Como ter um ImageButton transparente: 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>

Foi isso que tentei obter um ImageButton transparente para colocar esses botões em um SurfaceView. Mas o Eclipse me dá um erro no projeto assim que eu incluir a linha transparente no xml.

Por favor ajude.

Namratha
fonte
3
apenas uma nota lateral: em vez de sua própria imagem transparente, você pode geralmente também apenas usar @android: cor / transparente - sem necessidade de sua imagem transparente próprio costume
Mathias Conradt
6
Observe que, ao fornecer ao botão da imagem um plano de fundo transparente, você remove um feedback visual do estado clicado no botão (e provavelmente desativado). Isso resulta em uma ligeira diminuição da usabilidade.
szeryf
A fim de ter certeza de que o ImageButton realmente é colocada sobre a SurfaceView ele também é útil para chamar previousButton.bringToFront (), caso contrário, ele ainda pode ser escondido atrás do SurfaceView
Jay Snayder
A API do Android fornece o atributo correto para criar um plano de fundo transparente sem perder o feedback visual do botão clicado ou dos outros estados! Leia minha resposta abaixo!
precisa saber é o seguinte

Respostas:

984

Tente usar null como plano de fundo ...

android:background="@null"
Quintin Robinson
fonte
Obrigado. Isso funciona. Somente a imagem é vista e não a caixa ao seu redor. Mas posso colocar esse botão sobre o SurfacaView, ou seja, sobre a visualização do vídeo? Isso é possível? Como eu faço isso?
Namratha 04/08/10
1
@Namratha O SurfaceViewdeve permitir que você coloque seus botões sobre uma superfície, mas observe: "Isso pode ser usado para colocar sobreposições como botões na parte superior da superfície, embora note que isso pode ter um impacto no desempenho, pois uma mistura alfa completa o composto será executado sempre que a superfície for alterada ". de developer.android.com/reference/android/view/SurfaceView.html
Quintin Robinson
57
Não é correto usar um plano de fundo nulo !! A API do Android fornece o atributo correto para criar um plano de fundo transparente sem perder o feedback visual do botão clicado ou dos outros estados! Leia minha resposta abaixo!
precisa saber é o seguinte
1
Definir o plano de fundo do botão como nulo não é uma boa ideia, como mencionado acima e abaixo. As respostas com o uso de atributos apropriados são muito melhores ou crie um seletor correto com transparência para comentários adequados e sem cliques quando clicados.
precisa
Isso deu-me um erro .. Mas isso funcionou para mim Android: background = "@ android: cor / transparente"
Juan Mendez
303

NÃO USE UM LAYOUT TRANSAPENTE OU NULL, pois o botão (ou a exibição genérica) não será mais destacado ao clicar !!!

Eu tive o mesmo problema e, finalmente , encontrei o atributo correto da API do Android para resolver o problema. Pode ser aplicado a qualquer visualização.

Use isso nas especificações do botão:

android:background="?android:selectableItemBackground"
lory105
fonte
4
Isso requer API 11 - você elimina 24% dos telefones em estado selvagem (a partir de janeiro de 2014)
Shaun Neal
8
Parece que usando a biblioteca de Suporte, o requisito API> = 11 pode ser superado stackoverflow.com/questions/19714682/…
Someone Somewhere
15
Para um efeito cascata rodada, usoandroid:background="?android:selectableItemBackgroundBorderless"
Mateus Gondim
7
Felizmente, a partir de 2019, isso elimina aproximadamente 0% dos telefones na natureza.
user1032613
140

Você também pode usar uma cor transparente:

android:background="@android:color/transparent"
Geykel
fonte
9
@ Geeykel, @ Adam, você deve estar ciente de que esse atributo é bastante perigoso quando usado incondicionalmente, pois adicionará outra camada transparente que será atraída para a tela e poderá resultar em pixels extraídos e retardar o aplicativo. Para testá-lo, você pode usar Developer option: Show GPU overdrawe ver a diferença entre definir um plano de fundo para @nulle @android:color/transparent.
Amirlazarovich 06/03
Esta é a melhor e mais eficaz resposta. :)
Juan Mendez
112

Definir o plano de fundo como "@null"fará com que o botão não tenha efeito quando clicado. Esta será uma escolha melhor.

style="?android:attr/borderlessButtonStyle"

Mais tarde, descobri que usando

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

também é uma boa solução. E você pode herdar esse atributo em seu próprio estilo.

jiasli
fonte
não funcionou para mim e o segundo fez o aplicativo travar. Talvez eu tenha feito algo errado, mas não sei o quê.
Yannis Dran
5
Requer API nível 11. Fonte
Jason Robinson
2
Essa é a resposta correta. Também usando o AppCompact, com esta resposta, o efeito cascata funciona perfeitamente e, na API 19, o efeito pressionado normal funciona imediatamente. android: background = "? android: attr / selectableItemBackground" Brilhante!
Raffaeu 28/03/2015
Esta solução selectableItemBackgroundpossui um benefício adicional de fazer com que o botão altere os estados quando clicado. As outras soluções fazem com que o botão apareça não clicável.
IgorGanapolsky
14

em tempo de execução, você pode usar o seguinte código

btn.setBackgroundDrawable(null);
Adem
fonte
8
btn.setBackgroundColor (Color.TRANSPARENT); Funciona em todos os níveis da API
AlBeebe
setBackgroundDrawable está obsoleta setBackgroundColor uso como sugerido acima por AlBeebe
bhaskarc
este método é agora preterido
Raio Kiddy
11

Eu acredito que a resposta aceita deve ser: android:background="?attr/selectableItemBackground"

É o mesmo que a resposta de @ lory105, mas usa a biblioteca de suporte para compatibilidade máxima (o android:equivalente está disponível apenas para API> = 11)

Sam Stern
fonte
8

Remova esta linha:

android:background="@drawable/transparent">

E no seu conjunto de classes de atividade

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

Você pode definir o nível alfa de 0 a 255

o significa transparente e 255 significa opaco.

Nishant Shah
fonte
Mas isso permite que o botão fique sobre o SurfaceView?
Namratha 04/08/10
5
Esta resposta é errada e enganosa, pois torna o botão inteiro semi-opaco. Se desejar fazer isso a partir do código, passe nulo para o método setBackground. setAlpha não é o que você precisa.
Quintin Willison
Isso torna toda a visão transparente.
Raj
5

A melhor maneira é usar o código de cor transparente

android:background="#00000000"

use o código de cor # 00000000 para tornar qualquer coisa transparente

Ajay Venugopal
fonte
4
@android:color/transparentsem valores codificados.
Fred
1
Não, os valores referenciados devem ser preferidos ... mas IMO, @Fred, mesmo colocando uma @android:referência diretamente no layout é considerado um valor codificado, pois se você deseja alterá-lo, ainda precisa navegar no layout para encontrá-lo. Gostaria de declarar algo como isso <item name="something">@android:color/transparent</item>e usar o meu próprio valor no layout para que eu possa encontrá-lo facilmente no meu resources.xml arquivo e alterá-lo sem ter que procurá-la no layout
Cliff Burton
2

Use ImageView... ele tem fundo transparente por padrão ...

Daniel Gomez Rico
fonte
3
Mas não é um botão
Moesio
2
Você pode usar um ImageView como um botão. No seu código java, você diz ImageView previous = (ImageView) findViewById (R.id.previous); e anterior.setOnClickListener (novo OnClickListener {public void onClick (/ * isso acontece quando você toca no ImageView * /)}); Voila!
marienke
2

Eu já estava adicionando algo ao plano de fundo. Isso funcionou para mim:

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

(Android Studio 3.4.1)

Edição : só funciona no API api nível 21 e acima. para compatibilidade, use isso em vez disso

   android:background="@android:color/transparent"
Arsam
fonte
1

Usa isto:

<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" />
Akshay Paliwal
fonte
1

Defina o plano de fundo do ImageButton como @null em 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>
Murtuza Khan
fonte
1

Use "@ nulo" . Funcionou para mim.

<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" />
abir99
fonte
1

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

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

É definida programaticamente a cor de fundo como transparente

 ImageButton btn=(ImageButton)findViewById(R.id.ImageButton01);
 btn.setBackgroundColor(Color.TRANSPARENT);
Zar E Ahmer
fonte
0

Programaticamente, isso pode ser feito por:

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
Muhammed Refaat
fonte
Não sou a favor do voto negativo, mas isso parece tornar toda a imagem transparente, não apenas o fundo.
Trevor
@ threed eu sei, e esse é exatamente o OP perguntando em sua pergunta, "um ImageButton transparente".
Muhammed Refaat 5/05
1
Você está absolutamente certo, o OP pediu um botão transparente. Mas seu exemplo sugere que ele poderia ter pedido um botão com um fundo transparente (por exemplo android:background="@drawable/transparent"). De qualquer forma, estou apenas sugerindo uma possível razão para o voto negativo; Não estou dizendo que é justificado.
Trevor
1
@ threed bem, pode ser que esse seja o motivo, obrigado de qualquer maneira.
Muhammed Refaat
0

No Backgroundatributo XML set, para qualquer White(#FFFFFF)tom ou tom de cor, se Black(#000000)você quiser transparência, basta colocar 80 antes do código hash real.

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

Eu usei um transparente pngpara o ImageButtone o ImageButtontrabalhado.

Kiyoshi
fonte
Esta não é uma boa solução. Use o atributo correto fornecido pela API do Android! Leia meu answare.
precisa saber é o seguinte
Isso resultará em outra camada, adicionando ao excesso.
tir38