2011-12-19 4 views
4

Je veux le style de la lisview dans mon application comme on le voit est cette imageAppliquer le style à Android ListView

Expected Output

J'ai essayé de le développer par gradient application:

Code

pour list_item_normal est:

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

    <gradient 
     android:centerColor="#E6E6E6" 
     android:endColor="#CCCCCC" 
     android:startColor="#FFFFFF" 
     android:angle="270"/> 
    <!-- 
     <gradient 
     android:startColor="#FF7500" 
     android:centerColor="#FFCC00" 
     android:endColor="#FF7500" 
     android:angle="270"/> 
    --> 

    <stroke 
     android:width="1dp" 
     android:color="#A0000000" /> 

    <padding 
     android:bottom="8dp" 
     android:left="5dp" 
     android:right="5dp" 
     android:top="8dp" /> 

    <corners android:radius="5dp" /> 

</shape> 
Code

pour list_item_pressed.xml est:

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

    <gradient 
     android:centerColor="#E6E6E6" 
     android:endColor="#CCCCCC" 
     android:startColor="#FFFFFF" android:angle="270"/> 
    <!-- 
     <gradient android:startColor="#FF66CFE6" android:centerColor="#FF207FB9" 
     android:endColor="#FF0060B8" android:angle="270"/> 
    --> 

    <stroke 
     android:width="2dp" 
     android:color="#80000000" /> 

    <padding 
     android:bottom="8dp" 
     android:left="5dp" 
     android:right="5dp" 
     android:top="8dp" /> 

    <corners android:radius="7dp" /> 

</shape> 
Code

pour list_item_pressed.xml:

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

    <gradient 
     android:centerColor="#E6E6E6" 
     android:endColor="#CCCCCC" 
     android:startColor="#FFFFFF" android:angle="270"/> 
    <!-- 
     <gradient android:startColor="#FF66CFE6" android:centerColor="#FF207FB9" 
     android:endColor="#FF0060B8" android:angle="270"/> 
    --> 

    <stroke 
     android:width="2dp" 
     android:color="#80000000" /> 

    <padding 
     android:bottom="8dp" 
     android:left="5dp" 
     android:right="5dp" 
     android:top="8dp" /> 

    <corners android:radius="7dp" /> 

</shape> 

et list_gradient.xml

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

    <item android:state_pressed="true" 
      android:drawable="@drawable/list_item_pressed" /> 

    <item android:state_focused="true" 
      android:drawable="@drawable/list_item_selected" /> 

    <item android:drawable="@drawable/list_item_normal" /> 

</selector> 

et je l'ai appliqué ce style sur custom listitem comme:

<TextView 
    .../> 

<ImageView 
    ... /> 

et le main.xml dans lequel j'ai lisview est:

<ListView 
    android:id="@+id/List" 
    style="@style/list_item_gradient" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:layout_weight="1" 
    android:clickable="true" > 
</ListView> 

et je reçois la sortie comme indiqué ci-dessous:

current output

S'il vous plaît aidez-moi en disant ce que je fais mal ..

Merci Shruti

+0

J'essayais de me salir les mains avec des mises en page personnalisées de la liste. J'ai fait ce qui était nécessaire comme l'état pressé, l'état sélectionné et l'état normal (comme mentionné dans vos fichiers drawable). J'ai également changé le style de disposition par défaut en list_item_gradient.Je cours dans les avertissements de chorégraphe que je peux faire trop de travail sur le fil principal. Quel pourrait être un travail possible pour cela? –

+0

essayez d'utiliser la tâche asynchrone, pour réduire le travail sur le thread principal. – Shruti

+0

J'ai aussi lu sur certains forums que c'est parce que le style n'a pas d'attribut parent. Comment en définir un? –

Répondre

5

Connaissez-vous tramage? Cochez cette case: http://android.amberfog.com/?p=247.

Vérifiez également les questions suivantes:

  1. How to draw a smooth/dithered gradient on a canvas in Android
  2. Android view dithering

Et oui, je vous suggère de créer un adaptateur personnalisé pour votre LitsView, dans lequel il vous suffit de créer une ligne personnalisée fichier de mise en page XML et appliquer l'image d'arrière-plan pour une fois.

+0

s'il vous plaît expliquer un peu plus .. dois-je ajouter le listselector ?? – Shruti

+0

J'ai créé un adaptateur personnalisé que je ne suis pas capable de changer la couleur de la liste sélectionnée – Shruti

+0

@DroidShruti je pense que vous parlez de cette image "jaune" apparaît en touchant une liste particulière, non? Si tel est le cas, créez le fichier selector.xml et appliquez-le. –

1

créer un customAdapter étend baseAdapter. Créez list_item.xml et donnez-lui le sélecteur de jeu d'apparence désiré à son arrière-plan. c'est tout.

+0

J'ai crété un adaptateur personnalisé Le seul problème que j'ai est lors de la sélection d'un élément de la liste sa couleur ne change pas comme le montre la première image – Shruti