Tło przycisku jako przezroczyste

177

Mam przycisk. Kiedy naciskam przycisk, muszę ustawić tekst jako pogrubiony, w przeciwnym razie normalny. Więc napisałem style dla odważnych i normalnych.

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

Teraz mam button_states.xml jako:

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

W moim układzie dla tego przycisku muszę też ustawić przezroczyste tło ... Jak to zrobić? Mój kod układu to:

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

Jak dodać przezroczyste tło do mojego stylu?

Anju
źródło
3
Tak wiele z tych dobrych odpowiedzi można już zaakceptować ...
QED,
sprawdź tę odpowiedź tutaj, aby utworzyć przezroczysty przycisk z obramowaniem
Basheer AL-MOMANI
'Dlaczego po prostu nie użyjesz TextView i nie wywołasz akcji onClick?
Dula wnRp

Odpowiedzi:

360

Aby tło było przezroczyste, po prostu zrób android:background="@android:color/transparent".

Jednak Twój problem wydaje się być nieco głębszy, ponieważ używasz selektorów w naprawdę dziwny sposób. Sposób, w jaki go używasz, wydaje się zły, chociaż jeśli faktycznie działa, powinieneś umieścić obraz tła w stylu jako plik <item/>.

Przyjrzyj się bliżej, w jaki sposób style są używane w źródle Androida. Chociaż nie zmieniają stylu tekstu po kliknięciu przycisków, jest tam wiele dobrych pomysłów, jak osiągnąć swoje cele.

Steve Pomeroy
źródło
1
Spójrz na moją wyjaśnioną odpowiedź. Na początek źle odczytałem twój problem. Tło zostanie ustawione w stylu.
Steve Pomeroy
Przepraszamy, nie mam jasności co do rozwiązania. Samo ustawienie @android: color / transparent nie obsługuje stylów dotykowych, które mają zwykłe przyciski (i jest równoważne ustawieniu tła na @null).
gatoatigrado
@gatoatigrado: czy masz na myśli, że chcesz, aby przezroczysty obszar był zaznaczony na pomarańczowo lub zacieniony? Jeśli tak, musisz utworzyć w tym celu niestandardowe obrazy z 9 poprawkami.
Steve Pomeroy
@StevePomeroy, tak, domyślny efekt przycisku w Androidzie 4.1 polega na tym, że [po naciśnięciu przycisku] tło będzie jasnoniebieskie z jeszcze jaśniejszym niebieskim konturem.
gatoatigrado
@gatoatigrado: ok. Jeśli tego chcesz, nie możesz użyć przezroczystego przycisku. Nie jestem pewien, co próbujesz tam osiągnąć.
Steve Pomeroy
121

Wypróbuj nowy sposób ustawiania przezroczystego tła

    android:background="?android:attr/selectableItemBackground"
Muhammad Aamir Ali
źródło
9
To właśnie polecam. W ten sposób
Ryan Newsom,
to jest lepsza odpowiedź
Marcos Dávalos
35

użyj #0000(tylko cztery zera, w przeciwnym razie będzie uważane za black) to jest kod koloru dla przezroczystości. Możesz użyć go bezpośrednio, ale polecam zdefiniowanie koloru w color.xml, abyś mógł cieszyć się ponownym użyciem kodu.

Prasham
źródło
9
Na szczęście zostało to już zdefiniowane dla nas jako@android:color/transparent
Richard Le Mesurier
34

Dodaj to do swojego 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
źródło
32

Możesz również użyć: w swoim xml:

android:background="@null"

lub w kodzie:

buttonVariable.setBackgroundColor(Color.TRANSPARENT);
Hunkeone
źródło
Głosujcie za dawaniem alternatyw, uwielbiam widzieć wszystkie opcje!
Burkely91,
18

Osiągnąłem to w XML z

android:background="@android:color/transparent"
C. Skjerdal
źródło
9

użyłem

btn.setBackgroundColor(Color.TRANSPARENT);

i

android:background="@android:color/transparent"
Sindri Þór
źródło
btn.setBackgroundColor (Color.TRANSPARENT); dla mnie działa dobrze
jay_mziray
8

Selektory działają tylko w przypadku elementów rysunkowych, a nie stylów. Odniesienie


Po pierwsze , aby ustawić przezroczyste tło przycisku, użyj następującego atrybutu, ponieważ nie wpłynie to na animacje Material Design:

style="?attr/buttonBarButtonStyle"

Istnieje wiele sposobów stylizacji przycisku. Sprawdź ten samouczek .

Po drugie , aby pogrubić tekst po naciśnięciu, użyj tego kodu 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
źródło
1

Możesz to osiągnąć poprzez ustawienie kanału alfa kolorów.

Schemat kolorów jest taki jak ten #AARRGGBB, gdzie A oznacza kanał alfa (przezroczystość), R oznacza czerwony, G - zielony i B - niebieski.

Raphael S.
źródło
1

Krok 1: Utwórz nowy plik zasobów w formie do rysowania i wklejania

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

zapisz to jako ButtonUI (powiedzmy)

Krok 2: Zastosuj interfejs użytkownika do przycisku 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
źródło
0

Kod:

button.setVisibility(View.INVISIBLE);

XML:

android:background="@android:color/transparent"
Chief Madog
źródło
0

Możemy użyć atrybutu android: background w Button xml jak poniżej.

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

Albo możemy użyć stylu

style="?android:attr/borderlessButtonStyle" dla przezroczystego i pozbawionego cienia tła.

Shihab Uddin
źródło
-2

Kolor tła stosuje się tak samo, jak transparent(light gray)kliknięcie przycisku.

ButtonName.setOnClickListener()

W powyższej metodzie ustawiasz kolor tła przycisku.

Pinki
źródło
6
Martwiąc się, że zostało to przegłosowane. Nie rób tego, proszę. Przyszły opiekun przeklnie twoje imię. Ustaw tło za pomocą selektora i miej jeden kolor / do rysowania dla wciśniętych i jeden dla nie. Nie pisz kodu, aby zmienić go w odbiorniku - NIE tak to się robi.
themightyjon
-2

Możesz to łatwo zrobić dodając poniższy atrybut w pliku xml. Ten kod był testowany dużo czasu.

android:background="@android:color/transparent"
Chamath Jeevan
źródło
2
Po co dodawać tę odpowiedź? To rozwiązanie jest już w dwóch innych odpowiedziach, w tym w tej z największą liczbą głosów.
Makyen