Як видалити тінь кнопки (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.