Wen*_*nbo 7 android android-widget android-spinner
我试图通过设置android:popupBackground来改变android微调器弹出窗口背景,但它没有任何效果.有什么方法可以改变它吗?
<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">
Run Code Online (Sandbox Code Playgroud)
cla*_*ker 17
我认为你试图改变Spinner弹出窗口的"外部"背景,而不是Spinner"pupup items"的背景.此外,我假设通过弹出窗口,您指的是Spinner的对话框模式,其中浮动对话框窗口出现在您的活动之上,而不是新的下拉模式.
对于一个干净,可持续的方法,它在多个Android平台上表现良好,并减少了应用程序中的冗余需求,我认为必须了解官方文档没有告诉我们的内容.所以跟我走一小段路.
关于Spinners的棘手部分是使用适配器将它们连接到数据.虽然这是比较容易识别改变android.R.layout.simple_spinner_item和它的朋友的外观钩,那些只确定Spinner的当前显示的项目的风格以及各单弹出项目.但它是适配器负责创建ListView和其他框架ListView的小部件.
这种复杂性可能是为什么Android已经推出了它可以在即时"为"在指定的某些属性的原因微调,虽然它们然后应用到Spnner的孩子,如机器人:popupBackground.这不一定是一种干净的方法,而是一组有限的便利功能.关于popupBackground,顺便说一句,这是在API一级出台,但纱厂尊重它只有在spinnerMode =下拉列表中,这是在API级别11.这就是为什么如果你错误地使用它,你将永远不会被通知的原因介绍.
明知适配器创建的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>
Run Code Online (Sandbox Code Playgroud)
不幸的是,还有更多的工作要做.因为android:prompt可用于为弹出窗口创建标题,弹出窗口实际上不仅仅包含ListView.
Android使用AlertDialog
现在AlertDialogs的样式,我们仍然必须解决这样一个事实,即更新版本的Android不再使用AlertDialogs用于Spinner对话框了.这并没有伤害,因为对于那些人,应该保持AlertDialog风格.这只意味着我们也需要设置新弹出窗口的样式.
为此,请创建特定于版本的主题XML文件,以将其他样式提取到自定义主题中,并提供特定于版本的样式XML文件.
感觉就像自己尝试一样,从这里开始?
Ent*_*lpi 10
android:popupBackground只有在使用时才有效android:spinnerMode = "dropdown",这可能就是为什么它对你的代码没有任何影响.你需要通过一些XML告诉spinner哪个模式.
android:spinnerMode = "dropdown"
Run Code Online (Sandbox Code Playgroud)
链接