2

我想为无边框按钮添加边框。但是,如果我使用父无边框按钮创建自己的样式并覆盖背景标记,我会丢失状态更改动画等,因为这也是由背景定义的。我自己也无法实现它们,因为原生 android 可绘制对象不能作为公共对象使用,因此无法访问。我不想复制drawables。是否只能以编程方式覆盖ondraw,还是我缺少基于 xml 的解决方案?(顺便说一句,这是一个周期表,所以这不应该涉及每个按钮都有一个 xml 文件,因为它们大约有 100 个)谢谢斯蒂芬

4

2 回答 2

1

其中大部分来自这篇文章

执行以下操作有 4 个步骤:

  1. 创建一个包含状态的 XML 文件。
  2. 为每个状态创建一个 XML 文件(或背景)
  3. 创建按钮的样式
  4. 将按钮添加到您的布局中,然后查看它的外观。

最困难的事情是第一步,所以我将在这里展示一个。对于其他人,您可以访问该站点或做自己的事情。本质上,它看起来像这样。基本上需要捕获所有 4 个状态。这应该保存在可绘制文件夹中,并且它的名称是您的应用程序将用于可绘制的名称的名称。

<?xml version="1.0" encoding="utf-8"?>

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:state_enabled="false"
        android:drawable="@drawable/loc_for_button_disabled" />
    <item
        android:state_pressed="true"
        android:state_enabled="true"
        android:drawable="@drawable/loc_for_button_pressed" />
    <item
        android:state_focused="true"
        android:state_enabled="true"
        android:drawable="@drawable/loc_for_button_focused" />
    <item
        android:state_enabled="true"
        android:drawable="@drawable/loc_for_button_enabled" />
</selector>
于 2012-12-23T12:26:36.420 回答
0

一种简单的方法是将您的按钮放置在单独的布局中,例如 aLinearLayout并为此布局提供背景颜色和例如 1dp 的填充。这将在按钮周围呈现“边框”。请注意,这在布局方面非常昂贵,因此当您有很多按钮时不要使用此方法。

正确的解决方案是为所有状态创建一个可绘制对象,并使用您的可绘制对象构建一个可绘制状态列表,并将此可绘制状态列表分配为按钮的背景。其实工作量不大,看看http://developer.android.com/guide/topics/resources/drawable-resource.html#StateList

于 2012-12-23T12:35:54.960 回答