Подтвердить что ты не робот

Android: Невозможно настроить разделитель счетчиков

Я пытаюсь создать тему для своего первого приложения для 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 светло-серый разделитель между элементами (которые едва можно увидеть на фоне светлого списка элементов) - ни высота, ни цвет разделителя никогда не затрагиваются (я также попытался установить это к выносливому, также без эффекта). Что я делаю неправильно?

4b9b3361

Ответ 1

У меня очень простая деятельность с 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>

Вот скриншот

sample activity screnshot

Если вы не можете заставить его работать оттуда, я могу отбросить всю вещь до репита github для вас.

Ответ 2

Вы можете добавить горизонтальную линию к выпадающему меню, которое будет эффективно создавать разделитель.

ИЗМЕНИТЬ

Дальнейший поиск нашел это:

SO ответ

Что в основном говорит то, что вы показываете, что пытаетесь сделать выше, должно работать... хотя в нем упоминается настройка этого стиля в вашей теме активности, и вы не говорите об этом.

Ответ 3

Метод стиля в принятом ответе хорошо работает, пока вам не понадобятся два прядильника с разными цветами разделителей.

Вот что я нашел в качестве альтернативы:

a) Установите атрибут popupBackgroundColor на счетчике цвет, который вы хотите для разделителя. Это будет окрашивать весь фон списка элементов (включая пространство, которое мы считаем разделителем).

b) Установите адаптеры spinners 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:

<Spinner
        ...
        android:popupBackground="@color/your_divider_color"            
        ...
        />

И, наконец, определение вашего адаптера массива:

ArrayAdapter<String> dataAdapter = new ...
dataAdapter.setDropDownViewResource(android.R.layout.drop_down_item);
spinner.setAdapter(dataAdapter);

Обратите внимание, что установка popupBackgroundColor не влияет, если spinner находится в диалоговом режиме .

Ответ 4

Вы можете сделать это в своем 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 STYLES ADD it

 <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));

Сообщите мне, было ли это полезно для вас! Хорошего дня!