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

Ebo*_*ike 11 android android-widget android-layout

我有一个Button我想要像Holo风格的微调器一样的样式,即在右下角有一个三角形加下划线 - 例如内置的联系人应用程序.

在此输入图像描述

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

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

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

Ebo*_*ike 2

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

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

在值/attr.xml中:

<declare-styleable name="MyApp">
    <attr name="holoSpinnerStyle" format="reference" />
</declare-styleable>
Run Code Online (Sandbox Code Playgroud)

您可以像这样创建微调按钮:

<Button
    style="?attr/holoSpinnerStyle"
     />
Run Code Online (Sandbox Code Playgroud)

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

在值/themes.xml中:

<style name="MyTheme">
    <item name="holoSpinnerStyle">@style/Widget.AppCompat.Spinner</item>
</style>
Run Code Online (Sandbox Code Playgroud)

在values-v11/themes.xml中:

<style name="MyTheme">
    <item name="holoSpinnerStyle">@android:style/Widget.Holo.Light.Spinner</item>
</style>
Run Code Online (Sandbox Code Playgroud)

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

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