如何从棒棒糖按钮中删除 border/shadow
How to remove border/shadow from lollipop buttons
api < 21 的按钮看起来不错。但是,+21 版本会创建下图所示的边框或阴影。如何在不更改孔主题但设置样式变量的情况下摆脱它?
这张彩色图片可能更清楚。按钮周围有某种边框。
我的按钮样式是这样定义的:
<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>
我建议您通过将高程设置为空来完全移除阴影。由于您已经拥有 XML 样式(添加它以普遍使用它),或者您可以将此属性添加到您的 XML 视图定义
android:elevation="0dp"
Lollipop 有一个叫做 stateListAnimator
的讨厌的小功能,它处理按钮上的高度,这会导致阴影。
删除 stateListAnimator
以消除阴影。
您有多种选择:
Java:
button.setStateListAnimator(null);
科特林:
button.stateListAnimator = null
或在您的布局 xml 中:
<Button
...
android:stateListAnimator="@null"
....
/>
我使用的最好和最简单的方法是将样式属性设置为 Button
<Button
...
style="?android:attr/borderlessButtonStyle"
....
/>
以后可能有人需要。
您可以利用一种没有边框的样式。
申请
style="@style/Base.Widget.AppCompat.Button.Borderless"
到您的项目删除边框
我通过在 Resources\values\styles.xml
中设置 android:stateListAnimator="@null"
全局 修复了此问题 :
<?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>
瞧,阴影永远消失了:)
在xml中我们可以使用
android:stateListAnimator="@null"
问题
从Androidv21开始,所有按钮默认添加边框。
<!-- 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>
"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
android 中的按钮有 statelistAnimator 属性 所以通过声明它为 null 我们可以删除按钮的边框
android:stateListAnimator="@null"
如果您想在 Kotlin 中以编程方式执行此操作,您可以这样做
button.stateListAnimator = null
api < 21 的按钮看起来不错。但是,+21 版本会创建下图所示的边框或阴影。如何在不更改孔主题但设置样式变量的情况下摆脱它?
这张彩色图片可能更清楚。按钮周围有某种边框。
我的按钮样式是这样定义的:
<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>
我建议您通过将高程设置为空来完全移除阴影。由于您已经拥有 XML 样式(添加它以普遍使用它),或者您可以将此属性添加到您的 XML 视图定义
android:elevation="0dp"
Lollipop 有一个叫做 stateListAnimator
的讨厌的小功能,它处理按钮上的高度,这会导致阴影。
删除 stateListAnimator
以消除阴影。
您有多种选择:
Java:
button.setStateListAnimator(null);
科特林:
button.stateListAnimator = null
或在您的布局 xml 中:
<Button
...
android:stateListAnimator="@null"
....
/>
我使用的最好和最简单的方法是将样式属性设置为 Button
<Button
...
style="?android:attr/borderlessButtonStyle"
....
/>
以后可能有人需要。
您可以利用一种没有边框的样式。
申请
style="@style/Base.Widget.AppCompat.Button.Borderless"
到您的项目删除边框
我通过在 Resources\values\styles.xml
中设置 android:stateListAnimator="@null"
全局 修复了此问题 :
<?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>
瞧,阴影永远消失了:)
在xml中我们可以使用
android:stateListAnimator="@null"
问题
从Androidv21开始,所有按钮默认添加边框。
<!-- 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>
"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
android 中的按钮有 statelistAnimator 属性 所以通过声明它为 null 我们可以删除按钮的边框
android:stateListAnimator="@null"
如果您想在 Kotlin 中以编程方式执行此操作,您可以这样做
button.stateListAnimator = null