如何在v7中创建Widget.Holo.Spinner样式的小部件

时间:2014-11-14 07:00:40

标签: android android-layout android-widget

我有一个Button,我希望像Holo风格的微调器一样设置样式,即在右下角有一个带三角形的下划线 - 例如,内置的联系人应用程序会这样做。

enter image description here

最简单的方法是创建按钮并将其设置为style="@android:style/Widget.Holo.Spinner" - 这样可以获得我想要的视觉效果。

但是,我的应用程序旨在支持Android 2.x,因此我无法使用原生Holo样式。 AppCompat有几个与微调器相关的样式,如@style/Widget.AppCompat.Spinner和其他样式,但它们看起来不一样 - 它们只是在窗口小部件右边缘的中心创建一个小三角形,没有下划线。

我可以通过创建自己的9补丁背景来捏造它,但我无法想象v7的AppCompat中缺少这种Holo微调器样式。有没有我可以使用的风格,或者任何其他方式来创建我想要的视觉效果而不创建我自己的可绘制资源?

2 个答案:

答案 0 :(得分:2)

我不建议你像旋转器一样设置按钮的样式。由于某种原因,Android为button创建了一种特定的样式。这个简单背后的原因;如果你设置一个像微调器一样的按钮,你会混淆你的应用程序的用户,他们会认为按钮是一个微调器。这就是为什么Android设计团队不推荐这个。

尽管如此,如果您仍希望将按钮显示为sninner,您可以随时复制微调器的设计,将其另存为图像并通过此xml将其设置为yuor按钮的背景:

android:background="@drawable/spinner"

微调器drawable需要作为图像保存在drawables文件夹中。

答案 1 :(得分:2)

用户" ozi"让我到那里,不幸的是他的答案被删除了,因为它只是一个链接。

诀窍是使用自定义属性并使用v11特定部分覆盖它。如果您使用主题,这是基本设置:

在values / attr.xml中:

<declare-styleable name="MyApp">
    <attr name="holoSpinnerStyle" format="reference" />
</declare-styleable>

你可以像这样创建你的Spinner-Button:

<Button
    style="?attr/holoSpinnerStyle"
     />

以下是关键:根据您是否拥有v11,您在主题中有不同的值:

在values / themes.xml中:

<style name="MyTheme">
    <item name="holoSpinnerStyle">@style/Widget.AppCompat.Spinner</item>
</style>

在values-v11 / themes.xml中:

<style name="MyTheme">
    <item name="holoSpinnerStyle">@android:style/Widget.Holo.Light.Spinner</item>
</style>

如果你不使用主题,你的设置几乎完全相同 - 你只需使用styles.xml,为你的按钮创建一个特定的样式,然后使用它。

在v11之前,这将创建一个旧式的微调器,但这实际上很好 - 在v11之前的环境中,v11微调器看起来不合适。