2010-10-29 27 views
14

Je n'arrive pas à obtenir un séparateur personnalisé, en utilisant un dessin que j'ai défini, pour fonctionner lorsque vous utilisez un ListActivity et ne créez pas un ListView personnalisé. Il semble presque que lorsque la VM crée ses propres ListView pour moi, avec le ListActivity, elle utilise un thème avec le diviseur par défaut fourni; et si j'essaie d'en fournir un, aucun séparateur n'apparaît dans le ListView.Modification d'un diviseur avec setDivider dans une ListActivity sans ListView personnalisé?

Je sais que je peux créer un ListView personnalisé en utilisant XML et définir android: divider sur ce ListView, et cela reconnaît mon séparateur personnalisé Drawable. Mais je préférerais juste laisser le ListActivity créer son propre ListView, si je peux comprendre comment faire fonctionner mon propre diviseur dessus.

Voici le code que je utilise maintenant:

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

Répondre

36

I figured it out. Le problème n'avait rien à voir avec le ListActivity générant un ListView pour moi. C'était dans la façon dont je définissais le diviseur en code Java.

Il y a deux façons que je vois de définir le diviseur (frontière entre les rangées de ListView) sur un ListView qui est gonflé automatiquement à partir d'un ListActivity, si vous voulez définir la couleur en XML:

Méthode 1:

Dans res/valeurs/Colors.xml, mettre:

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

Dans votre classe ListActivity-extension, faites ceci:

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

Méthode 2:

Dans res/valeurs/Colors.xml:

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

Et dans votre classe qui étend ListActivity:

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

Essayez ce code:

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

Pour définir diviseur listview programatically:

Ces codes mis à l'intérieur de votre .java Classe

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

Création 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>