如何在微调器项之间显示分隔符?

时间:2010-12-31 11:17:35

标签: android android-layout android-spinner divider

我使用带有分隔符的listviews和expandviews,我可以设置它们但是在spinner上看起来它们之间没有分隔物。

有人知道如何解决这个问题?

6 个答案:

答案 0 :(得分:19)

这对我有用:

<style name="SpinnerStyle" parent="Widget.AppCompat.ListView.DropDown">
        <item name="android:divider">#d1d1d1</item>
        <item name="android:dividerHeight">0.5dp</item>
    </style>

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
        <item name="android:dropDownListViewStyle">@style/SpinnerStyle</item>

使用它的优点是它不会消除悬停时的涟漪效应。    

答案 1 :(得分:14)

我设法为这个问题找到了更合适的解决方案(不包括单项布局中的分隔符)。

您需要做的是在活动的主题中定义

        <item name="android:dropDownListViewStyle">@style/App.Style.Spinner</item>

然后使用

创建正确的样式
   <style name="App.Style.Spinner" parent="@style/Widget.Sherlock.Light.ListView.DropDown">
           <item name="android:dividerHeight">10dip</item>
           <item name="android:divider">@drawable/mydivider</item>
   </style>

答案 2 :(得分:7)

根据@Talihawk的回答,我只对特定的微调器有效。不是设置活动主题,而是直接为微调器视图设置主题:

<style name="MatchSpinnerStyle" parent="android:style/Widget.ListView.DropDown">
    <item name="android:divider">#123456</item>
    <item name="android:dividerHeight">1dp</item>
</style>

<style name="MatchSpinnerTheme" parent="AppTheme">
    <item name="android:dropDownListViewStyle">@style/MatchSpinnerStyle</item>
</style>

<android.support.v7.widget.AppCompatSpinner
    android:layout_width="match_parent"
    android:layout_height="wrap_content"        
    android:theme="@style/MatchSpinnerTheme"/>

答案 3 :(得分:2)

对于有相同问题的人,我几乎放弃后,我知道如何获得分隔符。

我在每个项目的自定义布局底部添加了分隔线

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

<RelativeLayout android:id="@+id/RelativeLayout01"
    android:layout_width="fill_parent" android:layout_height="fill_parent"
    xmlns:android="http://schemas.android.com/apk/res/android" style="@style/ListItem2">

    <TextView android:id="@+id/Text" android:layout_width="fill_parent"
        android:layout_height="wrap_content" android:layout_alignParentLeft="true"
        style="@style/SpinnerView_Text" android:paddingLeft="10dip" />

    <ImageView android:id="@+id/icon" android:layout_width="wrap_content"
        android:layout_height="wrap_content" android:src="@drawable/arrowright"
        android:layout_alignParentRight="true" android:layout_centerInParent="true"
        android:layout_marginRight="20dip" />

</RelativeLayout>

<ImageView android:id="@+id/Divider1" android:layout_width="fill_parent"
    android:layout_height="1dip" style="@style/Divider"></ImageView>

答案 4 :(得分:0)

对不起,我是在问了问题多年后回答的,但解决方案非常简单,您只需做一件简单的事情即可。 转到您的style.xml文件,并将其添加到活动主题中

 <item name="android:dropDownListViewStyle">@style/MySpinner</item> 

在此之后,添加另一个名为MySpinner的主题,并与活动主题的父主题

 <style name="MySpinner" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="android:dividerHeight">2dp</item>
    <item name="android:divider">#000</item>
</style>

这将分隔您的单个项目,并且当我们将鼠标悬停在单个项目上时,不会显示分隔符

,但是请确保在执行此操作时,我们将此主题应用于活动中的所有微调器。现在,每个微调器都将使用相同的微调器主题。

答案 5 :(得分:0)

没有其他解决方案对我有用,因此我使用了drawable作为Spinner项目的背景,以产生所需的效果。

我创建了一个新的Drawable dropdown_divider.xml和一个自定义的SpinnerAdapter类,在其中我修改了getDropDownView()方法以将背景设置为Spinner项。

对于我来说,可绘制对象中的android:bottom="-56dp"是使线条完美居中的原因,但这取决于您在布局中应用的确切边距和填充。

dropdown_divider.xml

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
    <item
        android:left="16dp"
        android:right="16dp"
        android:bottom="-56dp">
        <shape android:shape="line" >
            <stroke
                android:width=".2dp"
                android:color="#FF666666" />
        </shape>
    </item>
</layer-list>

SpinnerAdapter

@Override
public View getDropDownView(int position, View convertView,
                            @NonNull ViewGroup parent) {
    TextView text = (TextView) super.getDropDownView(position, convertView, parent);
    text.setBackground(context.getDrawable(R.drawable.dropdown_divider));
    label.setTextColor(Color.BLACK);
    label.setText(lists.get(position).getTitle());

    return text;
}

结果如下所示: example picture of result