我正在尝试为我的第一个Android应用创建一个主题,它正在推动我绕过弯道。我终于设法弄清楚如何在下拉列表中设置项目样式,但现在我无法更改列表项之间的分隔符的颜色。我在stackoverflow上搜索了类似的问题,并尝试了几十种组合,但似乎没有任何效果。
这是我的styles.xml文件(为清楚起见缩写):
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="MyTheme" parent="android:Theme.Light">
<item name="android:spinnerStyle">@style/spinnerStyle</item>
<item name="android:spinnerDropDownItemStyle">@style/spinnerDropDownItemStyle</item>
<item name="android:dropDownListViewStyle">@style/spinnerListViewStyle</item>
</style>
<style name="spinnerStyle" parent="@android:style/Widget.Spinner">
<item name="android:background">@drawable/my_theme_spinner</item>
</style>
<style name="spinnerDropDownItemStyle" parent="@android:style/Widget.DropDownItem.Spinner">
<item name="android:background">@drawable/my_theme_spinner_item</item>
<item name="android:paddingLeft">5dp</item>
<item name="android:gravity">center_vertical</item>
</style>
<style name="spinnerListViewStyle" parent="@android:style/Widget.ListView.DropDown">
<item name="android:height">3dp</item>
<item name="android:dividerHeight">3dp</item>
<item name="android:divider">@color/divider</item>
</style>
</resources>
无论我做什么,我只是在物品之间得到1dp浅灰色分隔物(我的浅色列表项目背景几乎看不到) - 分隔物的高度和颜色都没有受到影响(我也试过设置它是一个可绘制的,也没有效果)。我做错了什么?
答案 0 :(得分:25)
我有一个非常简单的活动与Spinner,它适用于以下。我看到的唯一区别是你有一个<item name="android:height">3dp</item>
,而我根本没有。
<style name="TestSpinnerStyle" parent="android:style/Widget.ListView.DropDown">
<item name="android:divider">#ff0000</item>
<item name="android:dividerHeight">5dp</item>
</style>
<style name="SampleTheme" parent="@android:style/Theme.Holo.Light">
<item name="android:dropDownListViewStyle">@style/TestSpinnerStyle</item>
</style>
在我的活动中我有:
Spinner spinner = (Spinner) findViewById(R.id.spinner);
List<String> list = new ArrayList<String>();
list.add("list 1");
list.add("list 2");
list.add("list 3");
ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this,
android.R.layout.simple_spinner_item, list);
dataAdapter.setDropDownViewResource(android.R.layout.simple_dropdown_item_1line);
spinner.setAdapter(dataAdapter);
然后对于主布局我有以下XML:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Hello World, StylingActivity"
/>
<Spinner android:id="@+id/spinner"
android:layout_width="250dp"
android:layout_height="40dp"
/>
</LinearLayout>
这是截图
如果你无法从那里开始工作,我可以将整个事情推送给你的github回购。
答案 1 :(得分:1)
您可以在您使用的下拉列表中添加一条水平线,这样可以有效地创建分隔线。
修改强>
进一步搜索发现了这一点:
这基本上说明了你在上面尝试做的事情应该有效...虽然它提到在你的活动主题中设置那种风格而你没有提到这样做。
答案 2 :(得分:1)
您可以在layout.xml
中执行此操作 <Spinner
android:id="@+id/sp_to_create"
android:layout_width="match_parent"
android:layout_height="32dp"
android:layout_marginBottom="10dp"
style="@style/spinner_style"
android:prompt="@string/to_type_prompt" />
XML样式添加
<style name="spinner_style" 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">
<item name="android:dropDownListViewStyle">@style/spinner_style</item>
</style>
JAVA文件
your_spinnerList.setAdapter(new ArrayAdapter<>(getActivity(), android.R.layout.simple_dropdown_item_1line, timeOff_type_list));
请告诉我它是否对您有用!祝你今天愉快!
答案 3 :(得分:0)
接受答案中的样式方法效果很好,直到您需要两个具有不同分色器颜色的微调器。
以下是我发现的作为替代方案:
a)将微调器上的popupBackgroundColor属性设置为分隔符所需的颜色。这将为整个列表项的背景着色(包括我们认为是分隔符的空间)。
b)将微调适配器dropDownViewResource设置为CheckedTextView,将其背景属性设置为其他颜色(如果希望所选项具有不同的颜色,则设置为选择器)。除了分隔符之外,这将覆盖我们在步骤a中设置的颜色。有效地给了我们预期的结果。
所以你会:
抽拉/ spinner_dropdown_background_selector:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@color/your_unchecked_color" android:state_checked="false"/>
<item android:drawable="@color/your_checked_color" android:state_checked="true"/>
<item android:drawable="@color/your_unchecked_color"/>
</selector>
布局/ drop_down_item.xml:
<?xml version="1.0" encoding="utf-8"?>
<CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/text1"
android:background="@drawable/spinner_dropdown_background_selector"
android:textColor="@android:color/white"
android:singleLine="true"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ellipsize="marquee" />
你的微调器定义:
<Spinner
...
android:popupBackground="@color/your_divider_color"
...
/>
最后你的数组适配器定义:
ArrayAdapter<String> dataAdapter = new ...
dataAdapter.setDropDownViewResource(android.R.layout.drop_down_item);
spinner.setAdapter(dataAdapter);
请注意,如果微调器位于dialog mode,则设置popupBackgroundColor无效。