Pulsante sfondo trasparente


177

Ho un bottone Quando premo il pulsante devo rendere il testo in grassetto, altrimenti normale. Così ho scritto stili per grassetto e normale.

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

Ora ho un button_states.xml come:

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

Nel mio layout per questo pulsante, devo rendere anche lo sfondo trasparente ... Come lo farò? Il mio codice di layout è:

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

Come includerò lo sfondo trasparente nel mio stile?


3
Ormai molte di queste buone risposte potrebbero essere accettate ...
QED

controlla questa risposta qui per rendere il pulsante trasparente con bordo
Basheer AL-MOMANI

'perché non usi semplicemente un TextView e chiami l'azione su onClick di esso?
Dula wnRp

Risposte:


360

Per rendere trasparente uno sfondo, basta farlo android:background="@android:color/transparent".

Tuttavia, il tuo problema sembra essere un po 'più profondo, poiché stai utilizzando i selettori in un modo davvero strano. Il modo in cui lo stai usando sembra sbagliato, anche se se funziona davvero, dovresti mettere l'immagine di sfondo nello stile come un <item/>.

Dai un'occhiata più da vicino a come vengono utilizzati gli stili nella sorgente Android. Mentre non cambiano lo stile del testo facendo clic sui pulsanti, ci sono molte buone idee su come raggiungere i tuoi obiettivi lì.


1
Dai un'occhiata alla mia risposta chiarita. Ho letto male il tuo problema per iniziare. Lo sfondo viene impostato nello stile.
Steve Pomeroy,

Spiacenti, non sono chiaro sulla soluzione. Basta impostare @android: color / transparent non supporta gli stili on-touch dei normali pulsanti (ed equivale a impostare lo sfondo su @null).
gatoatigrado,

@gatoatigrado: vuoi dire che vuoi che un'area trasparente sia delineata in arancione o ombreggiata in qualche cosa? In tal caso, dovrai creare immagini personalizzate a 9 patch per questo.
Steve Pomeroy,

@StevePomeroy, sì, l'effetto del pulsante predefinito su Android 4.1 è che [alla pressione del pulsante] lo sfondo sia di un azzurro, con un contorno blu ancora più chiaro.
gatoatigrado,

@gatoatigrado: ok. Se lo desideri, non puoi utilizzare un pulsante trasparente. Non sono sicuro di ciò che stai cercando di realizzare lì.
Steve Pomeroy,

121

Prova un nuovo modo per impostare lo sfondo trasparente

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

9
Questo è ciò che consiglierei di usare. In questo modo, riuscirai a mantenere le bellissime animazioni del design dei materiali per i tuoi pulsanti =)
Ryan Newsom

questa è una risposta migliore
Marcos Dávalos,

35

usa #0000(solo quattro zeri altrimenti verrà considerato come black) questo è il codice colore per trasparente. Puoi usarlo direttamente, ma ti consiglio di definire un colore in color.xml in modo che tu possa godere della riutilità del codice.


9
Fortunatamente questo è già stato definito per noi come@android:color/transparent
Richard Le Mesurier il

34

Aggiungi questo nel tuo 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"/>

32

Puoi anche usare: nel tuo xml:

android:background="@null"

o nel codice:

buttonVariable.setBackgroundColor(Color.TRANSPARENT);

Consigliato per dare alternative, ama vedere tutte le opzioni!
Burkely91,

18

L'ho raggiunto con in XML con

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

9

ero solito

btn.setBackgroundColor(Color.TRANSPARENT);

e

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

btn.setBackgroundColor (Color.TRANSPARENT); funziona bene per me
jay_mziray,

8

I selettori funzionano solo per i disegni, non per gli stili. Riferimento


Innanzitutto , per rendere trasparente lo sfondo del pulsante, utilizzare il seguente attributo poiché ciò non influirà sulle animazioni del design del materiale:

style="?attr/buttonBarButtonStyle"

Esistono molti modi per modellare il tuo pulsante. Dai un'occhiata a questo tutorial .

In secondo luogo , per rendere il testo in grassetto su premuto, utilizzare questo codice 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;
    }
});

1

Puoi farlo impostando il canale alfa dei colori.

La combinazione di colori è come questa #AARRGGBB lì A sta per canale alfa (trasparenza), R sta per rosso, G per verde e B per blu.


1

Passaggio 1: creare un nuovo file di risorse in drawable e copia incolla

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

salvalo come ButtonUI (diciamo)

Passaggio 2: applicare l'interfaccia utente al pulsante xml

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

0

Codice:

button.setVisibility(View.INVISIBLE);

xml:

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

0

Possiamo usare l'attributo android: background in Button xml come di seguito.

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

Oppure possiamo usare lo stile

style="?android:attr/borderlessButtonStyle" per uno sfondo trasparente e senza ombre.


-2

Si applica il colore di sfondo come transparent(light gray)quando si fa clic sul pulsante.

ButtonName.setOnClickListener()

Nel metodo sopra impostato si imposta il colore di sfondo del pulsante.


6
Preoccupante che questo sia stato votato. Non farlo, per favore. Il futuro manutentore maledirà il tuo nome. Impostare uno sfondo con un selettore e disporre di un colore / disegnabile per premuto e uno per no. Non scrivere codice per cambiarlo nel listener - NON è così.
themightyjon,

-2

Puoi farlo facilmente aggiungendo l'attributo di seguito nel file xml. Questo codice è stato testato per un sacco di tempo.

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

2
Perché aggiungere questa risposta? Questa soluzione è già in altre due risposte, inclusa quella con il maggior numero di voti.
Makyen,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.