如何更改android spinner popupBackground

2023-11-23

我试图通过设置 android:popupBackground 来更改 android spinner 弹出窗口背景,但它没有任何效果。我有什么办法可以改变它吗?

    <Spinner
           android:id="@+id/eventNameSpinner"
           android:layout_width="160dp"
           android:layout_height="30dp"
           android:layout_alignParentLeft="true"
           android:layout_centerVertical="true"
           android:layout_marginLeft="6dp"
           android:background="@drawable/btn_name"
           android:paddingBottom="2dp"
           android:paddingTop="2dp"
           android:popupBackground="@drawable/bkg">

我假设您正在尝试更改 Spinner 弹出窗口的“外部”背景,而不是 Spinner“pupup items”的背景。另外,我认为弹出窗口是指 Spinner 的对话框模式,其中浮动对话框窗口出现在您的活动顶部,而不是新的下拉模式。

Strategy

对于一种在多个 Android 平台上表现良好并减少应用程序中冗余需求的干净、可持续的方法,我认为了解官方文档没有告诉我们的内容至关重要。那么请跟随我进行一次短途旅行。

Spinners 的棘手部分是Adapter用于将它们连接到数据。虽然识别用于更改 android.R.layout.simple_spinner_item 及其朋友的外观的钩子相对容易,但这些钩子仅确定 Spinner 当前显示的项目以及每个弹出项目的样式。但这是Adapter它负责创建ListView以及其他构成 ListView 的小部件。

这种复杂性可能就是 Android 引入了一些可以为“动态”指定的属性的原因。Spinner尽管它们随后被应用于 Spnner 的孩子,例如android:popup背景。这不一定是一种干净的方法,而是一组有限的便利功能。关于 popupBackground,顺便说一句,这是在 API 级别 1 中引入的,但 Spinners 仅在spinnerMode=下拉菜单,这是在 API 级别 11 中引入的。这就是为什么如果您使用错误它,您永远不会收到通知的原因。

较旧的 Android 版本(例如 2.2)

ListView

知道Adapter创建一个ListView,更改主题中的 ListView 外观并不是一个坏主意,因此有一个地方可以进行设计更改并且样式简单明了,如下所示:

<style name="MyTheme" parent="@android:style/[reference to original theme]" >
    <item name="android:listViewStyle">@style/myListView</item>
    [...]
</style>

<style name="myListView" parent="@android:style/Widget.ListView">
    [check Android's Widget.ListView to understand what you can change here]
</style>

警报对话框

不幸的是,还有更多的工作要做。因为 android:prompt 可用于为弹出窗口创建标题,所以弹出窗口实际上不仅仅包含 ListView。

Android 使用 AlertDialog

最近的 Android 版本(例如 4.2)

既然 AlertDialogs 的样式已经确定,我们仍然需要解决以下问题:较新版本的 Android 不再使用 AlertDialogs 作为 Spinner 对话框。这并没有什么坏处,因为对于那些人来说,AlertDialog 样式无论如何都应该保留。这只是意味着我们还需要设计新弹出窗口的样式。

为此,请创建特定于版本的主题 XML 文件以将其他样式拉入您的自定义主题,并提供特定于版本的样式 XML 文件。

想从这里开始自己尝试一下吗?

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何更改android spinner popupBackground 的相关文章

随机推荐