如何从棒棒糖按钮中删除边框/阴影

时间:2015-06-23 13:00:03

标签: android button android-5.0-lollipop

这些按钮看起来很适合api< 21.但是,+ 21版本会创建此边框或阴影,如下图所示。如何在不改变孔主题的情况下摆脱它,但设置样式变量?

enter image description here

这张彩色图片可能更清晰。按钮周围有某种边框。 enter image description here

我的buttonssstyle定义如下:

<unknown>:0: error: Swift does not support the SDK 'MacOSX10.10.sdk'

11 个答案:

答案 0 :(得分:169)

Lollipop有一个叫做stateListAnimator的令人讨厌的小功能,可以处理按钮上的高程,这会导致阴影。

删除stateListAnimator以消除阴影。

您有多种选择:

<强>爪哇:

button.setStateListAnimator(null);

<强>科特林:

button.stateListAnimator = null

或在您的布局xml中:

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

答案 1 :(得分:33)

我正在使用的最佳和最简单的方法是将样式属性设置为Button

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

可能是将来需要的人。

答案 2 :(得分:7)

你可以利用一种不带边框的风格。

申请

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

到你的项目以删除边框

答案 3 :(得分:6)

我在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>

瞧,阴影已经消失了。)

答案 4 :(得分:4)

Lollipop Appcompat主题

上添加了

“阴影”效果

在res / values-v21 / styles.xml中添加以下行以删除默认阴影

主题级别:

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

xml布局:

android:stateListAnimator="@null"

<强>爪哇:

setStateListAnimator(null);

<强>科特林:

stateListAnimator = null

答案 5 :(得分:1)

我建议您通过将高程设置为空来完全删除阴影。由于您已经拥有XML样式(添加此样式以便普遍使用它),或者您可以将此属性添加到XML视图定义

android:elevation="0dp"

答案 6 :(得分:1)

在xml中我们可以使用

android:stateListAnimator="@null"

答案 7 :(得分:1)

<强>问题

  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>
    
    • 属性&#34; stateListAnimator &#34;是引起问题的那个。
  2. <强>解决方案

    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>
      

答案 8 :(得分:1)

android中的按钮具有statelistAnimator属性,因此通过将其声明为null,我们可以删除按钮的边框

android:stateListAnimator="@null"

答案 9 :(得分:0)

如果您想在Kotlin中以编程方式执行此操作,则可以执行

button.stateListAnimator = null

答案 10 :(得分:-1)

您可以创建带有按钮颜色的xml可绘制对象,并将其设置为按钮的背景