Fundo do botão como transparente

177

Eu tenho um botão Quando pressiono o botão, tenho que deixar o texto em negrito, caso contrário, normal. Então eu escrevi estilos para negrito e normal.

<style name="textbold" parent="@android:style/TextAppearance">
<item name="android:layout_width">wrap_content</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:textStyle">bold</item>
</style>
<style name="textregular" parent="@android:style/TextAppearance">
<item name="android:layout_width">wrap_content</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:textStyle">normal</item>
</style>

Agora eu tenho um button_states.xml como:

<?xml version="1.0" encoding="utf-8"?>

<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_focused="true" android:state_pressed="true"
    style="@style/textbold" />
<item android:state_focused="false" android:state_pressed="true"
    style="@style/textregular" />

<item style="@style/textregular" />
</selector> 

No layout deste botão, também tenho que tornar o plano de fundo transparente ... Como farei isso? Meu código de layout é:

<Button android:id="@+id/Btn" android:background="@drawable/button_states" />

Como incluirei o plano de fundo tão transparente no meu estilo?

Anju
fonte
3
Então, muitos desses boas respostas poderia ser aceito por agora ...
QED
confira esta resposta aqui para fazer botão transparente com borda
Basheer AL-Momani
'por que você não usa um TextView e chama a ação onClick?
Dula wnRp

Respostas:

360

Para tornar um plano de fundo transparente, basta fazê-lo android:background="@android:color/transparent".

No entanto, seu problema parece ser um pouco mais profundo, pois você usa seletores de uma maneira realmente estranha. O modo como você o usa parece errado, embora, se realmente funcione, você deve colocar a imagem de plano de fundo no estilo como um <item/>.

Veja mais de perto como os estilos são usados ​​na fonte do Android. Embora eles não alterem o estilo do texto ao clicar nos botões, existem muitas boas idéias sobre como atingir seus objetivos lá.

Steve Pomeroy
fonte
1
Dê uma olhada na minha resposta esclarecida. Eu interpretei mal o seu problema para começar. O plano de fundo é definido no estilo.
Steve Pomeroy
Desculpe, não estou claro sobre a solução. Apenas definir @android: color / transparent não suporta os estilos de toque que os botões normais possuem (e é equivalente a definir o plano de fundo para @null).
gatoatigrado 14/10/12
@gatoatigrado: você quer dizer que deseja que uma área transparente seja delineada em laranja ou sombreada? Nesse caso, você precisará criar imagens personalizadas de 9 patches para isso.
Steve Pomeroy
@StevePomeroy, sim, o efeito padrão do botão no Android 4.1 é o de [ao pressionar o botão] o fundo ficar azul claro, com um contorno azul ainda mais claro.
gatoatigrado 16/10/12
@gatoatigrado: ok. Se você quiser isso, não poderá usar um botão transparente. Não tenho certeza do que você está tentando realizar lá.
9118 Steve Pomeroy #
121

Tente uma nova maneira de definir o plano de fundo transparente

    android:background="?android:attr/selectableItemBackground"
Muhammad Aamir Ali
fonte
9
Isto é o que eu recomendaria usar. Dessa forma, você consegue manter as belas animações de design material para seus botões =)
Ryan Newsom
isso é melhor resposta
Marcos Dávalos
35

use #0000(apenas quatro zeros, caso contrário, será considerado como black) este é o código de cores para transparente. Você pode usá-lo diretamente, mas eu recomendo que você defina uma cor em color.xml para poder aproveitar a reutilização do código.

Prasham
fonte
9
Felizmente, isso já foi definido para nós como@android:color/transparent
Richard Le Mesurier
34

Adicione isso no seu XML -android:background="@android:color/transparent"

        <Button
            android:id="@+id/button1"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:text="Button"
            android:background="@android:color/transparent"
            android:textStyle="bold"/>
Mohanraj
fonte
32

Você também pode usar: no seu xml:

android:background="@null"

ou no código:

buttonVariable.setBackgroundColor(Color.TRANSPARENT);
Hunkeone
fonte
Voto a favor por dar alternativas, adoro ver todas as opções!
Burkely91
18

Eu consegui isso com em XML com

android:background="@android:color/transparent"
C. Skjerdal
fonte
9

eu usei

btn.setBackgroundColor(Color.TRANSPARENT);

e

android:background="@android:color/transparent"
Sindri Þór
fonte
btn.setBackgroundColor (Color.TRANSPARENT); funciona bem para mim
jay_mziray
8

Os seletores funcionam apenas para desenháveis, não para estilos. Referência


Primeiro , para tornar o fundo do botão transparente, use o seguinte atributo, pois isso não afetará as animações de design do material:

style="?attr/buttonBarButtonStyle"

Existem várias maneiras de estilizar seu botão. Confira este tutorial .

Segundo , para deixar o texto em negrito, pressione este código java:

btn.setOnTouchListener(new View.OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {

        switch (event.getAction()) {
            // When the user clicks the Button
            case MotionEvent.ACTION_DOWN:
                btn.setTypeface(Typeface.DEFAULT_BOLD);
                break;

            // When the user releases the Button
            case MotionEvent.ACTION_UP:
                btn.setTypeface(Typeface.DEFAULT);
                break;
        }
        return false;
    }
});
Faraz
fonte
1

Você pode conseguir isso definindo o canal alfa das cores.

O esquema de cores é assim #AARRGGBB lá A significa canal alfa (transparência), R significa vermelho, G para verde e B para azul.

Raphael S
fonte
1

Etapa 1: Crie um novo arquivo de recurso no drawable e copie e cole

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">

    <stroke android:color="#fff" android:width="2dp"/>
    <corners android:radius="25dp"/>
    <padding android:right="15dp" android:top="15dp" android:bottom="15dp" android:left="15dp"/>
</shape>

salve-o como ButtonUI (digamos)

Etapa 2: aplicar a interface do usuário ao botão xml

<Button
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:text="join the crew"
  android:background="@drawable/ButtonUI"
  android:textColor="#fff"/>
Viraj Singh
fonte
0

Código:

button.setVisibility(View.INVISIBLE);

Xml:

android:background="@android:color/transparent"
Chefe Madog
fonte
0

Podemos usar o atributo android: background no Button xml como abaixo.

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

Ou podemos usar o estilo

style="?android:attr/borderlessButtonStyle" para transparente e sombreie menos fundo.

Shihab Uddin
fonte
-2

Você aplica a cor de fundo como transparent(light gray)quando clica no botão.

ButtonName.setOnClickListener()

No método acima, você define a cor de fundo do botão.

Pinki
fonte
6
Preocupar-se que isso foi votado. Não faça isso, por favor. O futuro mantenedor amaldiçoará seu nome. Defina um plano de fundo com um seletor e tenha uma cor / desenho para pressionado e outro para não. Não escreva código para alterá-lo no ouvinte - NÃO é assim que isso é feito.
themightyjon
-2

Você pode fazer isso facilmente adicionando o atributo abaixo no arquivo xml. Este código foi testado bastante tempo.

android:background="@android:color/transparent"
Chamath Jeevan
fonte
2
Por que adicionar esta resposta? Essa solução já está em duas outras respostas, incluindo a com mais votos.
Makyen