Изменение разделителя с setDivider в ListActivity без пользовательского ListView?

Кажется, я не могу настроить настраиваемый разделитель, используя Drawable, который я определил, для работы при использовании ListActivity, а не для создания пользовательского ListView. Похоже, что когда VM создает для меня свой ListView, с ListActivity, он использует тему с предоставленным по умолчанию разделителем; и если я попытаюсь предоставить один, то в ListView никаких разделителей вообще не появится.

Я знаю, что я могу создать пользовательский ListView с помощью XML и определить android: divider на этом ListView, и это распознает мой пользовательский разделитель Drawable. Но я бы предпочел просто позволить ListActivity создать свой собственный ListView, если я смогу понять, как заставить мой собственный делитель работать над ним.

Вот код, который я использую сейчас:

public class Categories extends ListActivity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        final String[] OPTIONS = {
            "Hello",
            "Goodbye",
            "Good Morning",
            "Greetings",
            "Toodaloo"
        };

        ArrayAdapter<String> adapter = new ArrayAdapter<String>(
            this, android.R.layout.simple_list_item_1, OPTIONS);
        setListAdapter(adapter);

        ListView lv = getListView();
        PaintDrawable sage = new PaintDrawable(R.drawable.sage);
        lv.setDivider(sage);
        lv.setDividerHeight(1);
    }
}

Ответы

Ответ 1

Я понял это. Проблема не имела ничего общего с ListActivity, генерирующим ListView для меня. Именно в том, как я определял разделитель в Java-коде.

Есть два способа определить разделитель (граница между строками ListView) в ListView, который автоматически накачивается из ListActivity, если вы хотите определить цвет в XML:

Способ 1:

В res/values ​​/colors.xml введите следующее:

<resources>
 <color name="sage">#cceebb</color>
</resources>

В классе, расширяющем ListActivity, сделайте следующее:

ListView lv = getListView();
ColorDrawable sage = new ColorDrawable(this.getResources().getColor(R.color.sage));
lv.setDivider(sage);
lv.setDividerHeight(1);

Способ 2:

В res/values ​​/colors.xml:

<resources>
 <drawable name="sage">#cceebb</drawable>
</resources>

И в вашем классе, который расширяет ListActivity:

ListView lv = getListView();
ColorDrawable sage = new ColorDrawable(this.getResources().getColor(R.drawable.sage));
lv.setDivider(sage);
lv.setDividerHeight(1);

Ответ 2

Попробуйте этот код:

searchText.setBackgroundColor(getResources().getColor(R.color.wordColorBlack));
ListView lv = getListView();
lv.setDivider(getResources().getDrawable(R.drawable.divider2));
lv.setDividerHeight(2);

Ответ 3

Чтобы установить разделитель в виде списка программно:

Этот код помещается внутри вашего .java класса

   ListView lv = (ListView) findViewById(R.id.lv);
   lv.setDivider(getResources().getDrawable(R.drawable.drawable_divider));
   lv.setDividerHeight(1);

Создание Drawable: {res > drawable > drawable_divider.xml}

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"

    android:shape="rectangle">

    <solid android:color="#ececec"></solid>

</shape>