Подтвердить что ты не робот

Как удалить границу/тень из кнопок леденца

Кнопки выглядят отлично для 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>
4b9b3361

Ответ 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 файл с цветом кнопки и установить его в качестве фона кнопки.