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


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.