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.


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"

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"

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"

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.


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);

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)


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.


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


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 ...


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"

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" />

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>

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" />

1

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

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

0

É definida programaticamente a cor de fundo como transparente

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

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

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   

-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.


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.