更改旋转器背景颜色,但保持箭头

我读了好几本关于它的书,但是我找不到我需要的东西。 我想保持灰色箭头,但我想从默认样式中删除水平栏,并有一个白色的背景。你知道我该怎么做吗?

下面是我现在拥有的(默认的 spinner 样式) :

enter image description here

这是我想要的:

enter image description here

93022 次浏览

用这个:

yourspinner.setOnItemSelectedListener(this);
@Override
public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
((TextView) yourspinner.getSelectedView()).setBackgroundColor(getResources()
.getColor(R.color.your_color));
}

类应该实现 OnItemSelectedListener。

下面是自定义旋转器的代码。请查一下,然后告诉我。我还没测试过。因此,请通知我检查这是否解决了你的问题。

<Spinner
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/spinner_background"
android:gravity="center"
android:paddingRight="10dp"
android:spinnerMode="dropdown"
android:textColor="your text color"
android:textSize="your text size" />

下面是创建 spinner 背景的可绘制文件(spinner _ backound.xml)。

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >


<item>
<shape android:shape="rectangle" >
<solid android:color="border color" />


<corners android:radius="3dp" />
</shape>
</item>
<item
android:bottom="1dp"
android:left="1dp"
android:right="1dp"
android:top="1dp">
<shape android:shape="rectangle" >
<solid android:color="@android:color/white" />


<corners android:radius="3dp" />
</shape>
</item>


</layer-list>

编辑:

请检查这个链接,它给你一个想法去做。 自定义旋转器背景

或者

你可以这么做。

<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="spinner background image">


<Spinner
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@null"/>


<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:src="arrow image" />


</RelativeLayout>

郑重声明,我找到了一个简单的解决方案: 用相对布局包装你的旋转器,然后添加一张图片:

 <RelativeLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@drawable/borderbottom_white"<!-- white background with bottom border -->
android:layout_marginTop="15dp"  >
<Spinner
android:id="@+id/postfield_category"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textSize="16sp"
android:background="@null"
android:minHeight="0dp" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:src="@drawable/arrowspinner" />
</RelativeLayout>

自定义旋转器和任何其他 Android 控件的一个好方法是使用 Android 资产工作室站点并选择 Android 全息色彩生成器。这将创建您可能需要的所有资产,包括“下划线”。它还生成实现更改的 XML 文件。

从该站点下载 ZIP 文件后,只需将图像和 XML 文件复制到项目中。

然后,您可以编辑所需的图像文件,以删除下划线。它们是9-补丁文件,称为:

  • Apptheme _ spinner _ default _ holo _ light.9. png
  • Apptheme _ spinner _ ability _ holo _ light.9. png
  • Apptheme _ spinner _ focus _ holo _ light.9. png
  • Apptheme _ spinner _ press _ holo _ light.9. png

有关这个过程的更完整的解释,以及一些示例 XML 文件,请参考我的相关答案:

       android:layout_alignParentRight="true"
android:layout_width="@dimen/spinner_width"
android:layout_height="wrap_content"
android:id="@+id/spnLocation"
android:entries="@array/labelFamily"
android:layout_centerVertical="true"


android:backgroundTint="@color/color_gray"

这对我有用

我根据@Mansur Khan 的回答做了一些修改。

在这种情况下,我们不需要添加 ImageView,因为旋转器已经有了一个三角形箭头。因此,请检查下面的代码:

    <RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="8dp"
android:background="#FFFFFF">
<Spinner
style="@style/Widget.AppCompat.DropDownItem.Spinner"
android:layout_width="match_parent"
android:layout_height="70dp"
android:id="@+id/sign_up_country"
/>
</RelativeLayout>

这是截图

以前: enter image description here

之后: enter image description here

一个简单的解决方案,不需要你为箭头创建自己的绘图工具,就是用一个 RelativeLayout包裹旋转器,并在 RelativeLayout中设置背景颜色,而不是旋转器:

<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#f00" >
<Spinner
android:id="@+id/spinner1"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</RelativeLayout>

下面的布局将创建一个背景旋转所需的颜色下拉箭头

  <LinearLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight=".6"
android:background="@drawable/edit_text_rounded_shape"
android:gravity="center|center_vertical">
<Spinner
android:id="@+id/spinerComanyName"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:padding="4dp"
android:layout_weight=".6"
android:layout_gravity="center"


android:entries="@array/spinner_item"
android:spinnerMode="dropdown"
android:theme="@style/Spinner"


/>
</LinearLayout>


<style name="Spinner">
<!-- Used for the bottom line when not selected / focused -->
<item name="colorControlNormal">@color/black</item>
<item name="colorControlActivated">@color/colorPrimary</item>
<!-- colorControlActivated & colorControlHighlight use the colorAccent          color by default -->
</style>

可以提供背景色和圆角

   <?xml version="1.0" encoding="utf-8"?>


<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle" android:padding="10dp">
<solid android:color="@color/white"/>
<stroke android:color="@color/grey"/>
<corners
android:bottomRightRadius="15dp"
android:bottomLeftRadius="15dp"
android:topLeftRadius="15dp"
android:topRightRadius="15dp"/>
</shape>

您好,我们不需要将 Spinner 组件包装在诸如 LinearLayout、 RelativeLayout 等增加布局解析的 Parent Layouts 周围,而只需要在可绘制文件夹下创建一个名为 Spinner _ bg.xml 的可绘制文件。

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<item>
<bitmap
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="right"
android:src="@drawable/icn_dropdown_arw" />
</item>
</layer-list>

设置 spinner _ bg 作为 spinner 的背景,它的工作原理很有魅力:

<Spinner
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="5dp"
android:background="@drawable/spinner_bg" />

我认为不做 复杂的布局的最好方法是:

使用这个 xml 作为您的微调器背景,您就可以开始了! ! !

<item android:state_pressed="true">
<shape>
<solid android:color="@color/materialBlueGray600" />
<corners android:radius="3dp" />
</shape>
</item>
<item android:state_selected="true">
<shape>
<solid android:color="@color/materialGray50" />
<corners android:radius="3dp" />
</shape>
</item>
<item>
<layer-list>
<item>
<shape>
<solid android:color="@color/materialGray50" />
<corners android:radius="3dp" />
</shape>
</item>


<item android:gravity="right">
<bitmap android:antialias="true"  android:gravity="right" android:src="@drawable/ic_expand_small" />
</item>
</layer-list>
</item>

总是在使用微调器、按钮和 EditText 并且需要插入绘图时,我经常将元素(微调器、 EditText 等)包装在 FrameLayout 中。举个例子:

<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">


<Spinner
android:id="@+id/spinner_component"
android:layout_width="match_parent"
android:layout_height="45dp"
android:background="@drawable/your_rectangle_style"
android:textColor="@color/your_text_color" />


<ImageView
android:layout_width="11dp"
android:layout_height="9dp"
android:src="@drawable/arrow_spinner"
android:layout_gravity="right|center_vertical"
android:layout_marginRight="7dp" />
</FrameLayout>

另一个重要的提示是 FrameLayout 允许您在绘图工具上设置 OnClick 函数。