Changing a divider with setDivider in a ListActivity without a custom ListView?

28,671

Solution 1

I figured it out. The issue had nothing to do with the ListActivity generating a ListView for me. It was in how I was defining the divider in Java code.

There are two ways that I see to define the divider (border between ListView rows) on a ListView that is automatically inflated from a ListActivity, if you want to define the color in XML:

Method 1:

In res/values/colors.xml, put the following:

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

In your ListActivity-extending class, do this:

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

Method 2:

In res/values/colors.xml:

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

And in your class that extends ListActivity:

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

Solution 2

To set divider in listview programatically:

These code put inside in your .java Class

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

Creating 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>

Solution 3

Try this code:

searchText.setBackgroundColor(getResources().getColor(R.color.wordColorBlack));
ListView lv = getListView();
lv.setDivider(getResources().getDrawable(R.drawable.divider2));
lv.setDividerHeight(2);
Share:
28,671
hotshot309
Author by

hotshot309

I have the most experience with Java EE, Spring MVC, TortoiseSVN, Eclipse-based IDEs, Maven, and Jenkins. I've also used Javascript, CSS, JSPs, and various flavors for HTML for my work. I'd like to get back into writing Android apps.

Updated on July 21, 2020

Comments

  • hotshot309
    hotshot309 almost 4 years

    I can't seem to get a customized divider, using a Drawable I've defined, to work when using a ListActivity and not creating a custom ListView. It almost seems like when the VM creates its own ListView for me, with the ListActivity, it uses a theme with the default divider provided; and if I try to provide one, no dividers appear in the ListView at all.

    I know that I can create a custom ListView using XML and define android:divider on that ListView, and this does recognize my custom divider Drawable. But I would prefer to just let the ListActivity create its own ListView, if I can figure out how to get my own divider working on it.

    Here's the code I'm using now:

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