Android: не может стиль spinner divider
Я пытаюсь создать тему для моего первого приложения для Android, и это ведет меня за поворот. Мне, наконец, удалось выяснить, как стиль в раскрывающемся списке, но теперь я не могу изменить цвет разделителя между элементами списка. Я искал подобные вопросы в stackoverflow и пробовал десятки комбинаций, но ничего не работает.
вот мой стиль.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 серый разделитель между элементами (который едва можно увидеть с моим светлым фоном элемента списка) - ни высота, ни цвет разделителя никогда не затрагиваются (я также попытался установить его в drawable, также без эффекта). Что я делаю не так?
4 ответов
у меня очень простая деятельность с Прядильщиком, и она работает для следующего. Единственное отличие, которое я вижу, что у вас есть <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 для вы.
вы можете добавить горизонтальную линию в раскрывающийся список, который вы используете, что эффективно создаст разделитель.
редактировать
некоторые дальнейшие поиски нашли это:
что в основном говорит о том, что вы пытаетесь сделать выше, должно работать... хотя в нем упоминается установка этого стиля в вашем активность тема, и вы не упоминаете об этом.
вы можете сделать это в макете.в 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));
Дайте мне знать, если это было полезно для вас! Хорошего дня!
метод стиля в принятом ответе работает хорошо, пока вам не понадобятся два блесны с разными цветами делителя.
вот что я нашел работает в качестве альтернативы:
a) установите атрибут popupBackgroundColor на прядильщике в цвет, который вы хотите для делителя. Это будет цвет фона всего элемента списка (включая пространство, которое мы считаем разделителем).
b) установите адаптеры spinners dropDownViewResource как CheckedTextView с его атрибут фона устанавливается в какой-либо другой цвет (или селектор, если вы хотите, чтобы выбранные элементы имели другой цвет). Это переопределит цвет, который мы установили на шаге a для всего, кроме разделителя. эффективно давая нам желаемый результат.
так у вас будет:
drawable/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>
layout / 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);
обратите внимание, что установка popupBackgroundColor не имеет никакого эффекта, если счетчик находится в режим.