如何在下拉列表中的每个选项之间设置分隔线?

3

我正在寻找一些解决方案并尝试完成它。分隔线仍然没有显示出来。

我已经在styles.xml中为我的主题设置了样式:

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <!-- Others theme here. -->
    <item name="android:dropDownListViewStyle">@style/mySpinnerStyle</item>
</style>

这是我的Spinner样式

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

这里是我的下拉列表代码片段:
Spinner chooseDate = (Spinner) view.findViewById(R.id.chooseDate);

String[] date_group = dateList.toArray(new String[dateList.size()]);
            ArrayAdapter<String> itemDate = new ArrayAdapter<String>(getActivity(), R.layout.spinner, date_group);
            itemDate.setDropDownViewResource(R.layout.spinner);
            chooseDate.setAdapter(itemDate);

这是我的旋转器布局xml文件:
<Spinner
            android:theme="@style/mySpinnerStyle"
            android:spinnerMode="dialog"
            android:layout_gravity="center"
            android:layout_marginLeft="8dp"
            android:layout_marginRight="16dp"
            android:id="@+id/chooseDate"
            android:layout_width="match_parent"
            android:layout_height="38dp"
            android:background="@drawable/spinner_arrow" />

然后R.layout.spinner xml文件如下所示:
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@android:id/text1"
    android:textSize="22dp"
    android:theme="@style/mySpinnerStyle"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:ellipsize="marquee"
    android:gravity="center"
    android:paddingRight="40dp"
    android:singleLine="true" />

当我点击我的下拉列表时,弹出的对话框看起来像这样,在最后没有分隔符...

enter image description here

我为我的下拉列表设置了样式,但无法显示分隔线。我不知道为什么?

任何帮助将不胜感激。谢谢提前。

清单文件使用我的AppTheme:

<application
    android:allowBackup="true"
    android:icon="@drawable/app_icon_512x512"
    android:label="@string/app_name"
    android:supportsRtl="true"
    android:theme="@style/AppTheme"
    android:name="android.support.multidex.MultiDexApplication">

你尝试过移除Spinner的背景吗? - diegoveloper
是的,它没起作用。背景设置只是改变了我的旋转器边框。 - Morton
你的应用程序是否在清单文件中使用了“AppTheme”主题? - diegoveloper
是的,我的清单文件使用了android:theme="@style/AppTheme",就像我更新的问题中所述。 - Morton
3个回答

6
这可能会对您有所帮助,

activity_main.xml

(活动主文件)
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/rl"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="10dp"
    tools:context=".MainActivity"
    android:background="#effbe4"
    >
    <Spinner
        android:id="@+id/spinner"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        />
</RelativeLayout>

spinner_item.xml

<?xml version="1.0" encoding="utf-8"?>
<TextView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:padding="10dp"
    android:background="@drawable/spinner_item_border"
    />

spinner_item_border.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="#ff2632"/>
        </shape>
    </item>
    <item android:bottom="2dp">
        <shape android:shape="rectangle">
            <solid android:color="#d7ffa2"/>
        </shape>
    </item>
</layer-list>

在活动中

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    // Get reference of widgets from XML layout
    Spinner spinner = (Spinner) findViewById(R.id.spinner);

    // Initializing a String Array
    String[] plants = new String[]{
            "Black birch",
            "Bolean birch",
            "Canoe birch",
            "Cherry birch",
            "European weeping birch"
    };

    // Initializing an ArrayAdapter
    ArrayAdapter<String> spinnerArrayAdapter = new ArrayAdapter<String>(
            this,R.layout.spinner_item,plants
    );
    spinnerArrayAdapter.setDropDownViewResource(R.layout.spinner_item);
    spinner.setAdapter(spinnerArrayAdapter);
   }
}

谢谢。为spinner_item.xml设置背景是另一种方法。我甚至找不到它!再次感谢您。 - Morton
好的,愉快编程! - UltimateDevil

5
在Spinner项中展示分隔线需要在线性布局中设置两个属性: 1. 可以通过以下代码来实现分隔线和显示分隔线
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:divider="?android:attr/listDivider"
android:showDividers="end"
android:orientation="vertical">
<TextView
    android:id="@+id/textview"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_marginBottom="@dimen/dp5"
    android:textColor="#6F6F6F"

    android:textAllCaps="false"
    android:layout_marginStart="@dimen/dp5"
    android:layout_marginLeft="@dimen/dp5" />


</LinearLayout>

谢谢你的分享。 - Morton
它正在正常运行。感谢分享。 - Parth Patel

3

请从您的 R.layout.spinner (XML文件) 的 TextView 中删除 android:theme="@style/mySpinnerStyle"

并将该值更改为您的 spinner

android:spinnerMode="dialog"

使用此值。

android:spinnerMode="dropdown"

是的,那个我试图记住的东西。太棒了,伙计,好答案!+1 - UltimateDevil
1
谢谢。分隔符最终显示出来了。但是在我的情况下,我能否为微调框设置对话框?我找不到Dialog样式设置android:Widget.ListView.DropDown - Morton

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接