Как удалить границу/тень из кнопок леденца
Кнопки выглядят отлично для api < 21. Однако версии +21 создают эту границу или тень, которые показаны на изображении ниже. Как мне избавиться от него, не изменяя тему дыр, но устанавливая переменную стиля?
![enter image description here]()
На этом цветном изображении может быть более ясно. На кнопках есть какая-то граница.
![enter image description here]()
Мои кнопки стиля определяются следующим образом:
<style name="buttonTransparent" parent="Base.TextAppearance.AppCompat.Button">
<item name="android:background">#00000000</item>
<item name="android:textColor">@drawable/button_text_blue</item>
<item name="android:textSize">18dp</item>
<item name="android:textAllCaps">false</item>
<item name="android:minHeight">45dp</item>
</style>
<style name="buttonLargeWhite" parent="buttonTransparent">
<item name="android:background">#FFF</item>
<item name="android:layout_marginTop">10dp</item>
</style>
Ответы
Ответ 1
У леденца есть маленькая неприятная особенность под названием stateListAnimator
, которая обрабатывает возвышения на кнопках, что приводит к теням.
Удалите stateListAnimator
, чтобы избавиться от теней.
Для этого у вас есть несколько вариантов:
Java:
button.setStateListAnimator(null);
Котлин:
button.stateListAnimator = null
или в вашем макете XML:
<Button
...
android:stateListAnimator="@null"
....
/>
Ответ 2
Самый лучший и простой способ, который я использую, - установить атрибут стиля на кнопку
<Button
...
style="?android:attr/borderlessButtonStyle"
....
/>
может быть кто-то нужен в будущем.
Ответ 3
Уже существует стиль, который вы можете использовать, чтобы не иметь границ.
применить
style="@style/Base.Widget.AppCompat.Button.Borderless"
к вашему элементу, чтобы удалить границы
Ответ 4
Я установил этот глобально, установив android:stateListAnimator="@null"
в Resources\values\styles.xml
:
<?xml version="1.0" encoding="UTF-8"?>
<resources>
<style name="AppTheme" parent="AppTheme.Base">
</style>
<style name="AppTheme.Base" parent="Theme.AppCompat.Light.NoActionBar">
<item name="android:buttonStyle">@style/NoShadowButton</item>
</style>
<style name="NoShadowButton" parent="android:style/Widget.Button">
<item name="android:stateListAnimator">@null</item>
</style>
</resources>
И вуаля тени ушли навсегда:)
Ответ 5
эффект "shadow" добавлен в тему Lollipop Appcompat
добавьте следующую строку в res/values-v21/styles.xml, чтобы удалить тень по умолчанию
Уровень темы:
<item name="android:buttonStyle">@style/Widget.AppCompat.Button.Borderless</item>
XML-макет:
android:stateListAnimator="@null"
Java:
setStateListAnimator(null);
Котлин:
stateListAnimator = null
Ответ 6
Кнопки в android имеют свойство statelistAnimator, поэтому, объявив его null, мы можем удалить границу кнопки
android:stateListAnimator="@null"
Ответ 7
Я бы предложил вам просто полностью удалить тень, установив высоту на ничего. Поскольку у вас уже есть стиль XML (добавьте его для универсального использования), или вы можете добавить этот атрибут в определение представления XML
android:elevation="0dp"
Ответ 8
в xml мы можем использовать
android:stateListAnimator="@null"
Ответ 9
Вопрос
-
От Android v21 по умолчанию для всех кнопок добавлена Border.
<!-- Bordered ink button -->
<style name="Widget.Material.Button">
<item name="background">@drawable/btn_default_material</item>
<item name="textAppearance">?attr/textAppearanceButton</item>
<item name="minHeight">48dip</item>
<item name="minWidth">88dip</item>
<item name="stateListAnimator">@anim/button_state_list_anim_material</item>
<item name="focusable">true</item>
<item name="clickable">true</item>
<item name="gravity">center_vertical|center_horizontal</item>
</style>
- Свойство " stateListAnimator" является тем, которое вызывает проблему.
Решение
-
В нашей теме приложения установите стиль кнопки, чтобы удалить границу по умолчанию (сама библиотека поддержки Android предоставляет стиль для нее).
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- From Android-v21 - Border has been added by default, hence we are removing it. -->
<item name="android:buttonStyle">@style/Widget.AppCompat.Button.Borderless</item>
</style>
Ответ 10
Если вы хотите сделать это программно в Kotlin, вы можете сделать
button.stateListAnimator = null
Ответ 11
Вы можете создать xml файл с цветом кнопки и установить его в качестве фона кнопки.