Як видалити тінь кнопки (android)


168

Я хочу зняти тінь з кнопки, щоб вона здавалася більш плоскою.

У мене зараз це:

кнопка скасування з тінню

Але я хочу цього:

кнопка скасування без тіні


Я пишу тут коментар, це для мене робота. [ Stackoverflow.com/questions/27867284 / ... [1]: stackoverflow.com/questions/27867284 / ...
— msamardzic

Відповіді:


404

Ще одна альтернатива - додати

style="?android:attr/borderlessButtonStyle"

до вашої кнопки 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">
— Тобліг

125

Простіший спосіб зробити це - додати цей тег до кнопки:

android:stateListAnimator="@null"

хоча для нього потрібен рівень 21 або більше ..


2
Для мене дуже працювали
— KoreanXcodeWorker

1
Я люблю цей метод краще, він більш гнучкий.
— Ayejuni Ilemobayo Kings

@Alon Kogan, чи є зворотна сумісність для використання android:stateListAnimator атрибута?
— blueware

Це рішення дозволяє створити бота стилю, який повинен успадковувати borderlessButtonStyleстиль, що дає вам більшу гнучкість.
— Хуан Хосе Мелеро Гомес

це єдине рішення, яке працює для мене, тег
— borderlessButtonStyle

61

Я використовую нестандартний стиль

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

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

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

інакше текст кнопки буде в UpperCase.


59

Котлін

stateListAnimator = null

Java

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.