为什么在Android API 15中,“按钮栏中的按钮应该是无边框的”?

61

我正在开发一个Android应用程序,最近将API级别目标从8更改为15,现在当 ButtonLinearLayoutsTable Rows 中时,Eclipse会给出警告。

但是,当 ButtonRelativeLayout 中时,就不会出现这种情况。

警告显示:

按钮栏中的按钮应该没有边框;使用样式“?android:attr / buttonBarButtonStyle”(以及在父元素上使用?android:attr / buttonBarStyle)

我可以通过遵循建议或甚至抑制它来消除警告,但我想知道为什么会出现这个问题?有什么问题是带边框的按钮吗?


2
http://developer.android.com/design/building-blocks/buttons.html - Sam
@Math,你找到解决方案了吗? - jaimin
3
@jaimin 好的,我有点不情愿地最终适应了 Android 的新指令,调整了我的布局让它看起来更好。一开始它真的不好看,所以我必须花些时间去做这件事。当时我并不想投入太多时间,主要是因为我不知道为什么要这样做。但最终结果更加专业和持久,这就是为什么我觉得理解警告的根本原因并加以修复总比通过某个菜单选项让其停止要可取。 - Math
5个回答

45
无边框按钮是为了在整个Android平台上设计的一致性。建议您遵循指南,以便用户感觉您的应用程序是本地的,并且不像生硬的突出物,但是有许多情况下这并不合理,例如如果这使您的应用程序看起来不专业。如果是这种情况,则可以关闭警告。
要关闭警告,请转到项目属性-> Android Lint首选项。搜索“border”或“ButtonStyle”,并在右下角更改严重性以忽略。
您也可以在Eclipse首选项中为所有项目执行此操作。
对于Android Studio用户:
文件->设置->编辑器->检查->Android Lint。搜索“borderless”,取消选中或更改严重性。

18
好的,这会消除警告,但我仍然好奇为什么Android会警告我们使用无边框按钮。我的意思是,这是一些新的“最佳实践”建议吗?我应该遵循这个建议吗?如果我按照他们的建议,按钮会变得相当丑陋。我不明白这个警告的意义。 - Math
我没有意识到您将评论移到了答案中。我相信这现在回答了我的问题,也是正确的答案。很抱歉花了这么长时间才接受它。 - Math
2
这并不是真正回答实际问题的答案。那个警告的真正原因是什么? - Joop
我认为这些准则不再适用了。如果你在Android的设置/应用程序中查看,你会发现卸载/强制停止按钮是居中的,并且它们之间有间距。 - live-love
我完全不同意这个建议和警告。我会按照自己的喜好来设计我的按钮,非常感谢。 - rmirabelle

25

这是另一种简单的方法来解决它。

编译器试图告诉您设置按钮的样式。因此,只需添加以下Android默认无边框样式的样式即可消除错误。

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

这是证据

输入图像描述


1
添加一个去除按钮样式的功能,使其成为一个透明背景白色文本的按钮 - 有什么解决方法吗? - James F
1
@JamesF 的想法是为每个按钮定义一个样式。如果您已经有了一个,请使用它,警告也将消失。 - Fangming
这也有助于在使用背景属性对按钮进行样式设置而不是样式属性时使用。我用的值是“@ style / Widget.AppCompat.Button.Borderless”来消除警告。 - Marcell

0
在我的情况下,将该样式添加到仅为某些线性布局中的所有按钮会使没有任何边框的按钮。在将样式添加到布局后,我得到了分隔小边缘的按钮,就像我的(4.1.2)Android界面中的一些元素中的对话框正/负按钮一样。它工作得很正确。标准的Holo按钮很丑,但是使用这些样式它们看起来“专业”;-)

0

如果您只想消除特定代码的警告,只需在按钮中添加tools:ignore="ButtonStyle"即可。

<...Layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
...


<Button
...
tools:ignore="ButtonStyle"

(我不确定在提问时可能发生了什么。)


0
你可以添加这段代码来修复它 " style="?android:attr/borderlessButtonStyle"/> ",但如果你的模拟器太旧,那么这个问题也可能会出现。尝试更改你的模拟器为 Pixel 6 Pro。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接