Schaltflächenhintergrund als transparent

177

Ich habe einen Knopf. Wenn ich die Taste drücke, muss ich den Text fett machen, sonst normal. Also habe ich Stile für fett und normal geschrieben.

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

Jetzt habe ich eine button_states.xml als:

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

In meinem Layout für diese Schaltfläche muss ich auch den Hintergrund transparent machen ... Wie mache ich das? Mein Layoutcode lautet:

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

Wie werde ich Hintergrund als transparent in meinen Stil aufnehmen?

Anju
quelle
3
So viele dieser guten Antworten konnten inzwischen akzeptiert werden ...
QED
Schauen
'Warum benutzt du nicht einfach eine Textansicht und rufst die Aktion auf onClick davon auf?
Dula wnRp

Antworten:

359

Um einen Hintergrund transparent zu machen, tun Sie es einfach android:background="@android:color/transparent".

Ihr Problem scheint jedoch etwas tiefer zu liegen, da Sie Selektoren auf wirklich seltsame Weise verwenden. Die Art und Weise, wie Sie es verwenden, scheint falsch zu sein. Wenn es jedoch tatsächlich funktioniert, sollten Sie das Hintergrundbild als Stil in den Stil einfügen <item/>.

Schauen Sie sich genauer an, wie Stile in der Android-Quelle verwendet werden. Während sie das Text-Styling beim Klicken auf Schaltflächen nicht ändern, gibt es viele gute Ideen, wie Sie Ihre Ziele dort erreichen können.

Steve Pomeroy
quelle
1
Schauen Sie sich meine klare Antwort an. Ich habe Ihr Problem falsch verstanden, um zu beginnen. Der Hintergrund wird im Stil festgelegt.
Steve Pomeroy
Entschuldigung, mir ist die Lösung nicht klar. Nur @android: color / transparent zu setzen, unterstützt nicht die On-Touch-Stile, die normale Schaltflächen haben (und entspricht dem Setzen des Hintergrunds auf @null).
Gatoatigrado
@gatoatigrado: Meinst du damit, dass ein transparenter Bereich orange umrandet oder in etwas schattiert werden soll? In diesem Fall müssen Sie dafür benutzerdefinierte 9-Patch-Bilder erstellen.
Steve Pomeroy
@StevePomeroy, ja, der Standard-Tasteneffekt unter Android 4.1 besteht darin, dass [beim Drücken einer Taste] der Hintergrund hellblau mit einem noch helleren blauen Umriss ist.
Gatoatigrado
@gatoatigrado: ok. Wenn Sie das möchten, können Sie keine transparente Schaltfläche verwenden. Ich bin mir nicht sicher, was Sie dort erreichen wollen.
Steve Pomeroy
120

Versuchen Sie eine neue Methode, um den Hintergrund transparent zu machen

    android:background="?android:attr/selectableItemBackground"
Muhammad Aamir Ali
quelle
8
Dies ist, was ich empfehlen würde. Auf diese Weise können Sie die schönen Materialdesign-Animationen für Ihre Schaltflächen behalten =)
Ryan Newsom
Dies ist eine bessere Antwort
Marcos Dávalos
35

Verwenden Sie #0000(nur vier Nullen, sonst wird dies als betrachtet black). Dies ist der Farbcode für transparent. Sie können es direkt verwenden, aber ich empfehle Ihnen, eine Farbe in color.xml zu definieren, damit Sie den Code wieder verwenden können.

Prasham
quelle
9
Zum Glück wurde dies für uns bereits definiert als@android:color/transparent
Richard Le Mesurier
34

Fügen Sie dies in Ihre XML ein -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
quelle
32

Sie können auch Folgendes verwenden: in Ihrer XML:

android:background="@null"

oder im Code:

buttonVariable.setBackgroundColor(Color.TRANSPARENT);
Hunkeone
quelle
Upvote für Alternativen, liebe es, alle Optionen zu sehen!
Burkely91
18

Ich habe dies mit in XML mit erreicht

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

ich benutzte

btn.setBackgroundColor(Color.TRANSPARENT);

und

android:background="@android:color/transparent"
Sindri Þór
quelle
btn.setBackgroundColor (Color.TRANSPARENT); funktioniert gut für mich
jay_mziray
8

Selektoren funktionieren nur für Zeichen, nicht für Stile. Referenz


Erstens , um den Hintergrund der Schaltfläche transparent Verwendung das folgende Attribut , da dies nicht die Materialdesign Animationen beeinflussen:

style="?attr/buttonBarButtonStyle"

Es gibt viele Möglichkeiten, Ihre Schaltfläche zu gestalten. Schauen Sie sich dieses Tutorial an .

Zweitens , um den Text beim Drücken fett zu machen, verwenden Sie diesen Java-Code:

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

Sie können dies erreichen, indem Sie den Farb-Alphakanal einstellen.

Das Farbschema ist wie folgt: #AARRGGBB dort steht A für Alphakanal (Transparenz), R steht für Rot, G für Grün und B für Blau.

Raphael S.
quelle
1

Schritt 1: Erstellen Sie eine neue Ressourcendatei in Drawable und Copy Paste

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

Speichern Sie es als ButtonUI (sagen wir mal)

Schritt 2: Wenden Sie die Benutzeroberfläche auf die Schaltfläche xml an

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

Code:

button.setVisibility(View.INVISIBLE);

Xml:

android:background="@android:color/transparent"
Chef Madog
quelle
-2

Sie wenden die Hintergrundfarbe so an, transparent(light gray)als würden Sie auf die Schaltfläche klicken.

ButtonName.setOnClickListener()

Bei der obigen Methode legen Sie die Hintergrundfarbe der Schaltfläche fest.

Pinki
quelle
6
Ich mache mir Sorgen, dass dies positiv bewertet wurde. Tu das bitte nicht. Der zukünftige Betreuer wird Ihren Namen verfluchen. Stellen Sie einen Hintergrund mit einem Selektor ein und haben Sie eine Farbe / Zeichenbar für gedrückt und eine für nicht. Schreiben Sie keinen Code, um ihn im Listener zu ändern - so wird das NICHT gemacht.
Themightyjon
-2

Sie können dies einfach tun, indem Sie das folgende Attribut in die XML-Datei einfügen. Dieser Code wurde viel Zeit getestet.

android:background="@android:color/transparent"
Chamath Jeevan
quelle
2
Warum diese Antwort hinzufügen? Diese Lösung gibt es bereits in zwei anderen Antworten, einschließlich der mit den meisten Stimmen.
Makyen