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


169

Я хочу удалить тень от кнопки, чтобы она выглядела более плоской.

У меня есть это прямо сейчас:

отменить кнопку с тенью

Но я хочу этого:

кнопка отмены без тени


Я пишу комментарий здесь, это работа для меня. [ stackoverflow.com/questions/27867284/… [1]: stackoverflow.com/questions/27867284/…
— msamardzic

Ответы:


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

Это удаляет стиль кнопки, например тень и тиснение. Добавление селектора с фигурами необязательно. Это более точный ответ.
— Хуан Хосе Мелеро Гомес

35
Кроме того, я использую собственный стиль для своей кнопки. Вы можете расширить свой собственный стиль с: <style name = "MyCustomButtonStyle" parent = "Widget.AppCompat.Button.Borderless">
— Tobliug

125

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

android:stateListAnimator="@null"

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



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>

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
            }
        });

Это не правильный ответ, но вы на самом деле помогли мне решить мою проблему с похожей проблемой, так что спасибо!
— коробка

Ага! Хорошая идея - быстро поправила меня -
— Рохит Кумар
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.