2015-06-23 78 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

尝试将android:elevation =“0dp”设置为您的主布局。 – user765

回答

123

棒棒堂有一个名为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

你究竟想要删除什么?海拔将删除阴影(我想我不清楚) – Booger

+0

我刚刚添加了第二个图像,可能会使它更清晰,我想删除它。按钮周围有一些边框/阴影。 – Sulby

26

最佳和最简单的方法使用的是设置样式属性按钮

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

未来可能会有人需要。

5

已经有一种风格,你可以利用没有边界。

申请

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

到您的项目设置android:stateListAnimator="@null"Resources\values\styles.xml去除边框

3

我全球解决了这个问题

<?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,边境已添加默认情况下,所有的按钮。

    <!-- 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

“阴影” 效应上棒棒糖程序兼容性主题加入

添加以下行在res /值-V21/styles.xml删除默认阴影

主题等级:

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

XML布局:

android:stateListAnimator="@null" 

编程方式:

setStateListAnimator(null); 
0

按钮,机器人有statelistAnimator属性,因此,宣布其无效,我们可以删除按钮的边框

android:stateListAnimator="@null"