安卓下拉框的样式

27

我试图让我的Android应用程序更加时尚,并取得了一些进展,但是下拉菜单给了我麻烦。我有一张截图来展示问题:

如何去掉白色背景

我的目标是将背景中的白色框变为透明,与下拉菜单外屏幕的灰色覆盖层相同。

Android 4.0,API 15(如果我没记错的话)。

根据要求,这是我迄今为止的做法。这些是我认为相关的代码片段,但我可能漏掉了某些内容。

这是下拉菜单的XML:

<Spinner
    android:id="@+id/edit_countrySpinner"
    android:layout_width="0dip"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    android:entries="@array/edit_countryArray"
    android:gravity="center"
    android:prompt="@string/country_prompt" />

在我的values/style.xml文件中,如果我在这里更改背景颜色,对话框中的背景也会更改,但是所有其他背景也会更改。我还没有弄清楚如何仅更改下拉对话框中的背景。

<style name="appcin" parent="@android:style/Theme.NoTitleBar.Fullscreen">
    <item name="android:spinnerStyle">@style/spinnerStyle</item>
    <item name="android:spinnerItemStyle">@style/SpinnerItem</item>
    <item name="android:spinnerDropDownItemStyle">@style/SpinnerDropDownItem</item> -->
    <item name="android:background">#FFFFFF</item>
</style>
<style name="spinnerStyle">
    <item name="android:background">@drawable/pink_white_dropdown</item>
    <item name="android:clickable">true</item>
</style>
<style name="SpinnerItem">
    <item name="android:textColor">#993399</item>
    <item name="android:background">@drawable/pink_white_dropdown</item>
    <item name="android:maxHeight">10dip</item>
</style>
<style name="SpinnerDropDownItem">
    <item name="android:textColor">#993399</item>
    <item name="android:background">#FFFFFF</item>
</style>

我尝试将此添加到应用程序主题中,但它们都没有产生任何影响,背景仍然是白色。

<...theme....>
   <item name="android:dropDownListViewStyle">@style/DropDownStyle</item>
   <item name="android:dropDownSpinnerStyle">@style/DropDownStyle</item>
   <item name="android:dropDownSelector">@style/DropDownStyle</item>
</... theme ...>
<style name="DropDownStyle">
    <item name="android:background">#FFF000</item>
    <item name="android:popupBackground">#FFF000</item>
    <item name="android:cacheColorHint">#FFF000</item>
</style>
在drawable/pink_white_dropdown中,所有情况都显示相同的图像。 pink_white_arrow是我制作的9patch图像。有很多指南,这是我在谷歌上找到的一个30秒教程
<selector xmlns:android="http://schemas.android.com/apk/res/android">
  <item android:state_window_focused="false" android:state_enabled="true"
      android:drawable="@drawable/pink_white_arrow"/>
  <item android:state_window_focused="false" android:state_enabled="false"
      android:drawable="@drawable/pink_white_arrow"/>
  <item android:state_pressed="true" 
      android:drawable="@drawable/pink_white_arrow"/>
  <item android:state_pressed="false" 
      android:drawable="@drawable/pink_white_arrow"/>
  <item android:state_focused="true" android:state_enabled="true" 
      android:drawable="@drawable/pink_white_arrow"/>
  <item android:state_enabled="true" 
      android:drawable="@drawable/pink_white_arrow"/>
  <item android:state_focused="true" 
      android:drawable="@drawable/pink_white_arrow"/>
  <item 
      android:drawable="@drawable/pink_white_arrow"/>
</selector>

在这些文件中,我猜应该有某个东西需要被透明化,但我不知道具体是哪里。


1
你能分享一下你目前是怎么做的吗? - sdabet
1
添加了当前的解决方案,我认为这应该是所有相关的事情,但我不确定。 - dutt
4个回答

55
< p >删除SpinnerStyle背景属性。

< p >请删除此内容:

<style name="spinnerStyle">
    <item name="android:background">@drawable/whitish_rectangle</item>
</style>

这就是绘制白色背景矩形的原因。

在您的问题代码基础上,以下是一个基本示例,演示如何对 Spinner 进行样式设置:

styles.xml 文件为 SpinnerItemSpinnerDropDownItem 设置样式:

<resources>
    <style name="customtheme" parent="@android:style/Theme.Light">
        <item name="android:spinnerItemStyle">@style/SpinnerItem</item>
        <item name="android:spinnerDropDownItemStyle">@style/SpinnerDropDownItem</item>
    </style>
    <style name="SpinnerItem">
        <item name="android:textColor">#993399</item>
        <item name="android:background">@drawable/my_rectangle</item>
    </style>
    <style name="SpinnerDropDownItem">
        <item name="android:textColor">#993399</item>
        <item name="android:background">@drawable/my_rectangle</item>
    </style>
</resources>

为测试,我创建了一个明亮的可绘制形状,名为my_rectangle.xml。请将其替换为您自己的可绘制形状:

为测试,我创建了一个明亮的可绘制形状,名为my_rectangle.xml。请将其替换为您自己的可绘制形状:

<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
    <solid android:color="#ff0000" />
    <stroke
        android:width="1dp"
        android:color="#888888" />
</shape>

Spinner添加到Activity的布局中:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" 
    android:padding="40dip">
    <Spinner
        android:id="@+id/edit_countrySpinner"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:entries="@array/location_names"/>
</LinearLayout>

这将产生:

在此输入图像描述

没有白色方块背景。


非常接近,实际上是我的主题背景创建了白色框。但是你引导我走上了正确的道路,现在它看起来像应该的样子。好吧,至少这一部分是这样的 :} 现在要设计对话框的样式... 非常感谢你的帮助。 - dutt

2

添加

<item name="android:popupBackground">@null</item>

将其应用到您的旋转器样式中。


1
没起作用。我也尝试将该行添加到与旋转器和应用程序主题相关的所有样式中,但那也没有起作用。 - dutt
1
这帮助我找到了解决方案。旋转器放置在渐变灰色视图上,因此我只想让下拉菜单的背景为浅灰色 - 但它默认为 Holo 暗色。所以我将旋转器的样式设置为 <item name="android:popupBackground">#DDDDDD</item>,它完美地工作了。谢谢 @faylon! - bkurzius
2
你能解释一下如何设置Spinner的样式吗?我在我的主题中使用了这个 <item name="android:spinnerItemStyle">@style/SpinnerItemAppTheme</item>,其中 <style name="SpinnerItemAppTheme" parent="android:TextAppearance.Widget.TextView.SpinnerItem"> <item name="android:textColor">#ffffff</item> </style>。但是当我尝试将你建议的项目添加到SpinnerItemAppTheme中时,什么也没有发生。 - Sandra

2

Style Android Spinner

Android Spinner控件需要两个不同的自定义布局,一个用于显示视图,另一个用于下拉列表!

在这篇关于自定义Spinner的博客里,我们将指导您如何在Android Studio中创建自定义Spinner,它将包括以下内容:

  1. 所选项的自定义背景
  2. 自定义所选项文本颜色
  3. 下拉列表文本颜色
  4. 下拉列表的背景
  5. Spinner动画

链接在这里:https://androiddvlpr.com/custom-spinner-android/


提供解决方案的链接是有帮助的,但它们可能会消失。您应该考虑将链接中的主要内容添加到您的答案中。 - tbm

0

我有同样的问题,下面的代码适用于我:

<item name="android:popupBackground">@null</item> 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接