Jak usunąć cień przycisku (Android)


Odpowiedzi:


404

Inną alternatywą jest dodanie

style="?android:attr/borderlessButtonStyle"

do pliku XML przycisku, zgodnie z dokumentacją tutaj http://developer.android.com/guide/topics/ui/controls/button.html

Przykładem może być

<Button
android:id="@+id/button_send"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/button_send"
android:onClick="sendMessage"
style="?android:attr/borderlessButtonStyle" />

Spowoduje to usunięcie stylu przycisku, np. Cienia i wytłoczenia. Dodanie selektora z kształtami jest opcjonalne. To jest dokładniejsza odpowiedź.
Juan José Melero Gómez

35
Ponadto używam niestandardowego stylu dla mojego przycisku. możesz rozszerzyć swój własny styl z: <style name = "MyCustomButtonStyle" parent = "Widget.AppCompat.Button.Borderless">
Tobliug

125

Prostszym sposobem jest dodanie tego tagu do przycisku:

android:stateListAnimator="@null"

chociaż wymaga poziomu API 21 lub wyższego.


2
Bardzo mi
pomogło

1
Uwielbiam tę metodę bardziej, jest bardziej elastyczna.
Ayejuni Ilemobayo Kings

@Alon Kogan, czy jest jakaś wsteczna kompatybilność przy używaniu android:stateListAnimator atrybutu?
blueware

To rozwiązanie pozwala na stworzenie bota stylu, który musi dziedziczyć po borderlessButtonStylestylu, co daje większą elastyczność.
Juan José Melero Gómez

to jedyne rozwiązanie, które działało u mnie, tag
borderlessButtonStyle

61

Używam niestandardowego stylu

<style name="MyButtonStyle" parent="@style/Widget.AppCompat.Button.Borderless"></style>

Nie zapomnij dodać

<item name="android:textAllCaps">false</item>

w przeciwnym razie tekst przycisku będzie pisany wielkimi literami.


59

Kotlin

stateListAnimator = null

Jawa

setStateListAnimator(null);

XML

android:stateListAnimator="@null"

2
Łatwe i czyste.
JCasso

23

próbować : android:stateListAnimator="@null"


9
Chociaż może to rozwiązać problem PO, polecam dodać do tego kontekst. Dlaczego to pomoże? Ponadto „spróbuj tego” jest nieco mylące. Czy na pewno rozwiąże to problem, czy po prostu zgadujesz? Jeśli tak, napisz komentarz.
GergelyPolonkai

Wymaga API 21.
CoolMind


6

Używanie tego jako tła dla przycisku może pomóc, zmień kolor zgodnie ze swoimi potrzebami

<?xml version="1.0" encoding="utf-8" ?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" >
        <shape android:shape="rectangle">
            <solid android:color="@color/app_theme_light" />
            <padding
                android:left="8dp"
                android:top="4dp"
                android:right="8dp"
                android:bottom="4dp" />
        </shape>
    </item>
    <item>
        <shape android:shape="rectangle">
            <solid android:color="@color/app_theme_dark" />
            <padding
                android:left="8dp"
                android:top="4dp"
                android:right="8dp"
                android:bottom="4dp" />
        </shape>
    </item>
</selector>

4
Czy możesz wyjaśnić, jak to działa? Nie usunęło dla mnie cienia.
CACuzcatlan

zastępuje oryginalne tło cieniami, z tym tłem w jednolitym kolorze
dlohani

3

odpowiedź @ Alt-Cat działa dla mnie!

R.attr.borderlessButtonStyle nie zawiera cienia.

a dokument przycisku jest świetny.

Możesz także ustawić ten styl na swoim przycisku niestandardowym w drugim konstruktorze.

    public CustomButton(Context context, AttributeSet attrs) {
        this(context, attrs, R.attr.borderlessButtonStyle);
    }

3

Wszystkie powyższe odpowiedzi są świetne, ale zasugeruję inną opcję:

<style name="FlatButtonStyle" parent="Base.Widget.AppCompat.Button">
 <item name="android:stateListAnimator">@null</item>
 <!-- more style custom here --> 
</style>


Jest podobny do Alona Kogana ( stackoverflow.com/a/39122825/2914140 ).
CoolMind

czym różni się to od 5ish powyżej?
zeroDivider

2

Zamiast przycisku możesz użyć TextView i dodać odbiornik kliknięć w kodzie java.

To znaczy

w układzie zajęć xml:

<TextView
    android:id="@+id/btn_text_view"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@color/colorPrimaryDark"
    android:text="@string/btn_text"
    android:gravity="center"
    android:textColor="@color/colorAccent"
    android:fontFamily="sans-serif-medium"
    android:textAllCaps="true" />

w pliku aktywności java:

TextView btnTextView = (TextView) findViewById(R.id.btn_text_view);
btnTextView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // handler code
            }
        });

To nie jest poprawna odpowiedź, ale tak naprawdę pomogłeś mi rozwiązać mój problem podobnym problemem, więc dziękuję!
pudełko

Aha! fajny pomysł - dał mi szybką poprawkę -
Rohit Kumar
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.