Spinner-DropDown下划线和位置

来源:互联网 发布:电影符号学 知乎 编辑:程序博客网 时间:2024/06/05 23:58

当使用了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

这个试了好几种,比如类似下面的做法,修改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

0 0
原创粉丝点击