【问题标题】:how to change android spinner popupBackground如何更改 android spinner popupBackground
【发布时间】:2012-01-19 08:18:55
【问题描述】:

我试图通过设置 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">

【问题讨论】:

  • 我的意思是为微调器设置 android:popupBackground="@drawable/bkg" 并没有改变弹出窗口背景的预期效果。
  • 你应该张贴图片!

标签: android android-widget android-spinner


【解决方案1】:

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

策略

对于在多个 Android 平台上表现良好并减少应用程序冗余需求的干净、可持续的方法,我认为了解官方文档未告诉我们的内容至关重要。所以跟我来一段短途旅行吧。

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

这种复杂性可能是 Android 引入了一些属性的原因,这些属性可以为 Spinner 即时“指定”,尽管它们随后会应用于 Spnner 的子元素,例如 android:popupBackground。这不一定是一种干净的方法,而是一组有限的便利功能。关于 popupBackground,顺便说一句,这是在 API 级别 1 中引入的,但 Spinners 仅在 spinnerMode=dropdown 中尊重它,这是在 API 级别 11 中引入的。这就是为什么你永远不会收到通知的原因用错了。

较早的 Android 版本(例如 2.2)

列表视图

知道 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 文件。

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

【讨论】:

  • "...我们仍然必须解决这样一个事实,即最新版本的 Android 不再使用 AlertDialogs 进行 Spinner 对话框。"在此处的 android 6.0 上,更改 &lt;item name="android:alertDialogTheme"&gt; 仍然有效
【解决方案2】:

android:popupBackground 仅在使用 android:spinnerMode = "dropdown" 时有效,这可能就是它对您的代码没有任何影响的原因。你需要用一些 XML 告诉微调器它处于哪种模式。

android:spinnerMode = "dropdown"

链接

【讨论】:

  • 谢谢。但是如果我使用对话框作为微调模式,有没有办法改变弹出背景?
  • 我不知道,但你总是可以自己做微调器。看看adanware.blogspot.se/2012/03/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多