DropDown的位置
当使用了appcompat和Theme.AppCompat.Light主题时,Spinner会被替换为AppCompatSpinner。随之Spinner的特性也会发生一些变化,比如Spinner为DropDown mode时,DropDown的默认位置并没有出现在Spinner text的下面,而且覆盖在了Spinner text的上面。
加入android:dropDownVerticalOffset=”40dp”
使DropDown向下偏移40个dp。DropDown是一个PopupWindow。
<Spinner
android:id="@+id/layout_videoplayer_playrate"
style="@style/VideoDropDownNav"
android:layout_width="65dp"
android:spinnerMode="dropdown"
android:dropDownVerticalOffset="40dp"
android:layout_height="fill_parent"
android:layout_toLeftOf="@id/layout_videoplayer_seperator1"
android:layout_toStartOf="@id/layout_videoplayer_seperator1" />
android:dropDownHorizontalOffset=”XXdp”,应该是水平方向的偏移,但是我这里使用并没有生效。
这两张图就是设置了verticalOffset前后的情况
stackoverflow上有关的讨论http://stackoverflow.com/questions/21503142/android-spinner-dropdownhorizontaloffset-not-functioning-but-dropdownverticleoff
DropDown divider的颜色和大小
这个试了好几种,比如类似下面的做法,修改style,都没有生效。
<Spinner
android:id="@+id/layout_videoplayer_playrate"
style="@style/VideoDropDownNav"
android:layout_width="65dp"
android:spinnerMode="dropdown"
android:dropDownVerticalOffset="40dp"
android:layout_height="fill_parent"
android:layout_toLeftOf="@id/layout_videoplayer_seperator1"
android:layout_toStartOf="@id/layout_videoplayer_seperator1" />
//分隔符
\<style name="VideoDropDownNav" parent="@android:style/Widget.Spinner">
<item name="android:background">@drawable/videoplayer_alpha_background</item>
<item name="android:popupBackground">@drawable/videoplayer_top_layout_background</item>
<item name="android:dropDownSelector">@null</item>
<item name="android:dropDownVerticalOffset">40dp</item>
<item name="android:divider">#aaaaaa</item>
<item name="android:dividerHeight">1dp</item>
</style>
最后修改了Activity的Theme,里面最主要的是dropDownListViewStyle起了作用。
\<style name="AppThemeNoActionBar" parent="AppTheme">
<item name="windowNoTitle">true</item>
<!-- <item name="android:windowActionBar" tools:targetApi="11">false</item> -->
<item name="windowActionBar">false</item>
<item name="actionBarStyle">@style/Styled.ActionBar</item>
<item name="android:actionBarStyle" tools:targetApi="11">@style/Styled.ActionBar</item>
<item name="android:actionMenuTextAppearance" tools:targetApi="11">@style/MenuTextStyle</item>
<item name="actionMenuTextAppearance">@style/MenuTextStyle</item>
<item name="android:dropDownListViewStyle">@style/SpinnerDropDownStyle</item>
<item name="vpiIconPageIndicatorStyle">@style/Widget.IconPageIndicator</item>
<item name="vpiTabPageIndicatorStyle">@style/Widget.TabPageIndicator</item>
</style>
\<style name="SpinnerDropDownStyle" parent="android:style/Widget.ListView.DropDown">
<item name="android:divider">#aaaaaa</item>
<item name="android:dividerHeight">1px</item>
</style>
这种方案在一个activity里多个spinner,多个样式时没法解决。多个时不如直接修改DropDown的item对应的layout,直接在里面加入divider。
相关资料http://stackoverflow.com/questions/10916658/android-cannot-style-spinner-divider/13144302#13144302