2015-06-23 3 views
31

Кнопки выглядят отлично для api < 21. Однако версии +21 создают эту границу или тень, которые показаны на изображении ниже. Как мне избавиться от него, не изменяя тему дыр, но устанавливая переменную стиля?Как удалить границу/тень с кнопок леденца

enter image description here

Это может быть более ясным на этом цветном изображении. На кнопках есть какая-то граница. enter image description here

Мой buttonssstyle определяется следующим образом:

<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> 
+0

пытаются set android: elevation = "0dp" в ваш основной макет. – user765

ответ

123

Lollipop имеет малоприятную особенность под названием stateListAnimator который обрабатывает возвышения на кнопках, которые приводит к тени.

Снимите stateListAnimator, чтобы избавиться от теней.

У вас есть несколько вариантов, чтобы сделать это:

В коде:

button.setStateListAnimator(null); 

или в макете в XML: лучший и простой способ

<Button 
... 
android:stateListAnimator="@null" 
.... 
/> 
+1

Другая идея - использовать Textviews вместо кнопок. У них нет такого неожиданного поведения. – FlanschiFox

+0

Спасибо. Это решило проблему. – Sulby

+0

Отметьте ответ как «принятый», если он работает. Я рад, что могу вам помочь;) – FlanschiFox

3

Я хотел бы предложить вам просто удалить тень полностью, установив высоту ничего. Так как у вас уже есть стиль XML (добавить это, чтобы использовать это повсеместно), или вы могли бы добавить этот атрибут для определения представления XML

android:elevation="0dp" 
+3

Я попытался установить высоту, но это не решает проблему. – Sulby

+0

Что именно вы пытаетесь удалить? Elevation удалит тень (я думаю, что я не знаю) – Booger

+0

Я просто добавил второе изображение, которое может сделать его более ясным, что я хочу удалить. На кнопке есть какая-то граница/тень. – Sulby

26

я являюсь использование устанавливает атрибут стиля на кнопку

<Button 
... 
style="?android:attr/borderlessButtonStyle" 
.... 
/> 

Возможно, кому-то понадобится в будущем.

5

Существует уже стиль, который вы можете использовать, чтобы не иметь границ.

применять

style="@style/Base.Widget.AppCompat.Button.Borderless" 

для вашего пункта, чтобы удалить границы

3

Я исправил глобально установкой 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> 

И вуаля тени пропали навсегда)

0

в XML мы можем использовать

android:stateListAnimator="@null" 
0

Выпуск

  1. С 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" это тот, который является причиной проблемы.

Решение

  1. В нашей теме приложение, установить стиль кнопки для удаления границы по умолчанию (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> 
    
1

эффект "тень" добавляется на Lollipop AppCompat тему

добавьте следующую строку в разрешении/значения-v21/styles.xml для удаления по умолчанию Shadow

Theme уровень:

<item name="android:buttonStyle">@style/Widget.AppCompat.Button.Borderless</item> 

XML макет:

android:stateListAnimator="@null" 

Programatically:

setStateListAnimator(null); 
0

Кнопки в андроиде имеет statelistAnimator свойства так, объявив его недействительным, мы можем удалить границу кнопки

android:stateListAnimator="@null" 
Смежные вопросы