Как убрать тень кнопки (андроид)

Ответы:

404

Другая альтернатива - добавить

style="?android:attr/borderlessButtonStyle"

на ваш Button XML, как описано здесь http://developer.android.com/guide/topics/ui/controls/button.html

Примером может быть

<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" />
Alt-Cat
источник
Это удаляет стиль кнопки, например тень и тиснение. Добавление селектора с фигурами необязательно. Это более точный ответ.
Хуан Хосе Мелеро Гомес
35
Кроме того, я использую собственный стиль для своей кнопки. Вы можете расширить свой собственный стиль с: <style name = "MyCustomButtonStyle" parent = "Widget.AppCompat.Button.Borderless">
Tobliug
125

Более простой способ сделать это - добавить этот тег к вашей кнопке:

android:stateListAnimator="@null"

хотя это требует API уровня 21 или более ..

Алон Коган
источник
2
Очень хорошо
1
Я люблю этот метод лучше, он более гибкий.
Ayejuni Ilemobayo Kings
@ Алон Коган, есть ли обратная совместимость для использования android:stateListAnimator атрибута?
Blueware
Это решение позволяет вам создать бота стиля, унаследованного от borderlessButtonStyleстиля, что дает вам больше гибкости.
Хуан Хосе Мелеро Гомес
это единственное решение, которое работает для меня, тэг borderlessButtonStyle не работал, так как мне нужно избавиться от тени, пока кнопка нажата
ACAkgul
61

Я использую собственный стиль

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

Не забудьте добавить

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

в противном случае текст кнопки будет в верхнем регистре.

郑松岚
источник
59

Котлин

stateListAnimator = null

Ява

setStateListAnimator(null);

XML

android:stateListAnimator="@null"
Майкл
источник
2
Легко и чисто.
JCasso
23

пытаться : android:stateListAnimator="@null"

Сет
источник
9
Хотя это может решить проблему ОП, я бы рекомендовал добавить в нее некоторый контекст. Почему это поможет? Кроме того, «попробуй это» немного вводит в заблуждение. Вы уверены, что это решит проблему, или просто угадаете? Если это так, вы должны написать комментарий.
GergelyPolonkai
Это требует API 21.
CoolMind
14

Кнопки выбора материала добавить к кнопке xml: style="@style/Widget.MaterialComponents.Button.UnelevatedButton"

Эфи Г
источник
Иногда это похоже на stackoverflow.com/a/38004981/2914140 , но серая кнопка в отключенном состоянии становится светлее.
CoolMind
6

Использование этого в качестве фона для вашей кнопки может помочь, измените цвет в соответствии с вашими потребностями

<?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>
dlohani
источник
4
Можете ли вы объяснить, как это работает? Это не убрало тень от меня.
CACuzcatlan
заменяет исходный фон тенями, этот фон - сплошным цветом
dlohani
3

ответ @ Alt-Cat работает на меня!

R.attr.borderlessButtonStyle не содержит тени.

и документ кнопки отличный.

Кроме того, вы можете установить этот стиль на свою пользовательскую кнопку во втором конструкторе.

    public CustomButton(Context context, AttributeSet attrs) {
        this(context, attrs, R.attr.borderlessButtonStyle);
    }
Сян Ли
источник
3

Все вышеперечисленные ответы великолепны, но я предложу другой вариант:

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

Дык тханг
источник
Он похож на Алон Коган ( stackoverflow.com/a/39122825/2914140 ).
CoolMind
чем это отличается от 5ish выше?
zeroDivider
2

Вместо кнопки вы можете использовать TextView и добавить прослушиватель щелчков в коде Java.

Т.е.

в макете активности 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" />

в файле активности java:

TextView btnTextView = (TextView) findViewById(R.id.btn_text_view);
btnTextView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // handler code
            }
        });
caitcoo0odes
источник
Это не правильный ответ, но вы на самом деле помогли мне решить мою проблему с похожей проблемой, так что спасибо!
коробка
Ага! Хорошая идея - быстро поправила меня -
Рохит Кумар