Android自定义IcsSpinner(来自ActionBarSherlock)

Ray*_*kud 5 android android-listview android-theme android-spinner actionbarsherlock

目前我正在使用IcsSpinner,因为我想在所有设备上使用下拉式微调器.这是我想要实现的(显示封闭的微调器并扩展):

在此输入图像描述

但是我无法这样做.我试过这段代码:

<com.actionbarsherlock.internal.widget.IcsSpinner
     android:id="@+id/myspinner"
     style="@style/SpinnerStyle"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:drawSelectorOnTop="true"
     android:minHeight="@dimen/spinner_min_height"
     android:prompt="@string/pick_one" />
Run Code Online (Sandbox Code Playgroud)

风格:

<style name="SpinnerStyle" parent="Sherlock.__Widget.Holo.Spinner">
    <item name="android:popupBackground">@drawable/spinner_selector</item>
    <item name="android:dropDownSelector">@color/white_text</item>
</style>
Run Code Online (Sandbox Code Playgroud)

和drawable spinner_selector.xml:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
   <item android:state_pressed="true" android:drawable="@color/red" />
   <item android:state_focused="true" android:drawable="@color/red"/>
   <item android:state_selected="true" android:drawable="@color/red"/>
   <item android:drawable="@color/spinner_grey_bg"/>
</selector>
Run Code Online (Sandbox Code Playgroud)

但输出是这样的:

在此输入图像描述

我通过这样做来尝试另一种方法:通过自定义适配器中的视图:

ArrayAdapter<String> myAdapter= new ArrayAdapter<String>(mContext,
                        R.layout.spinner_entry_textview, adapterArray);
mySpinner.setAdapter(myAdapter);
Run Code Online (Sandbox Code Playgroud)

使用spinner_entry.textview.xml:

<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/tv_spinner_entry"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="@dimen/min_height_touch"
android:background="@drawable/spinner_selector"
android:textColor="@drawable/spinner_text_selector"
android:gravity="right|center_vertical"
/>
Run Code Online (Sandbox Code Playgroud)

spinner_text_selector.xml

<selector xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:state_pressed="true" android:color="@color/white_text" />
<item android:state_focused="true" android:color="@color/white_text"/>
<item android:state_selected="true" android:color="@color/white_text"/>
<item android:color="@color/red_text"/>
</selector>
Run Code Online (Sandbox Code Playgroud)

但我得到这个输出几乎是我想要的,但它也在关闭时绘制灰色和红色文本.(箭头指向的第一个元素应为带有白色文本的深灰色背景)在此输入图像描述

还尝试将样式应用于默认列表视图,因为微调器似乎有一个内部listView但没有做任何事情:

 <style name="AppTheme" parent="Theme.Sherlock.Light">
    <item name="android:listViewStyle">@style/MyListView</item>
    <item name="android:spinnerItemStyle">@style/SpinnerItem</item>
    <item name="android:spinnerDropDownItemStyle">@style/SpinnerDropDownItem</item>
    <item name="spinnerItemStyle">@style/SpinnerItem</item>
    <item name="spinnerDropDownItemStyle">@style/SpinnerDropDownItem</item>
</style>

<style name="MyListView" parent="@android:style/Widget.ListView">
    <item name="android:textColor">@drawable/spinner_text_selector</item>
    <item name="android:background">@drawable/spinner_selector</item>
</style>

<style name="SpinnerDropDownItem">
    <item name="android:textColor">@drawable/spinner_text_selector</item>
    <item name="android:background">@drawable/spinner_selector</item>
</style>

<style name="SpinnerStyle" parent="Sherlock.__Widget.Holo.Spinner">
    <item name="android:popupBackground">@drawable/spinner_selector</item>
    <item name="android:dropDownSelector">@color/white_text</item>
</style>
Run Code Online (Sandbox Code Playgroud)

关于如何实现这一点的任何想法?非常感谢.