2012-08-07 1 views
0

J'utilise GridView et un sélecteur d'image pour que mon image soit différente lorsqu'elle est appuyée ou lorsqu'elle n'est pas enfoncée. Tout compile, mais quand j'exécute l'application, j'obtiens une erreur "Ligne de fichier XML binaire # 9: erreur de gonflement du sélecteur de classe".Erreur lors du gonflement du sélecteur de classe lors de l'utilisation d'un sélecteur d'image dans GridView

Est-il possible d'utiliser un sélecteur d'image dans une grille? Quand je sors le sélecteur du xml, ça fonctionne bien.

Voici le xml pour chaque élément de grille:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:padding="5dp" > 
<selector 
    xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:drawable="@drawable/status_button_down" 
      android:state_pressed="true" /> 
    <item android:drawable="@drawable/status_button_down" 
      android:state_focused="true" /> 
    <item android:drawable="@drawable/status_button_up" /> 
</selector> 
<TextView 
    android:id="@+id/grid_item_label" 

     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Status"  
     android:textSize="9pt" 
     android:typeface="sans" 
     android:textColor="#000000" 
     android:gravity="center_horizontal" 
     android:layout_gravity="center_horizontal|bottom" 

     /> 
</LinearLayout> 

Voici le code pour l'adaptateur pour la vue grille:

public class ImageAdapter extends BaseAdapter { 
private Context mContext; 

public ImageAdapter(Context c) { 
    mContext = c; 
} 

public int getCount() { 
    //return mThumbIds.length; 
    return 16; 
} 

public Object getItem(int position) { 
    return null; 
} 

public long getItemId(int position) { 
    return 0; 
} 

// create a new ImageView for each item referenced by the Adapter 
public View getView(int position, View convertView, ViewGroup parent) { 

    LayoutInflater inflater = (LayoutInflater) mContext 
      .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

     View gridView; 
     //ImageView imageView; 
    if (convertView == null) { // if it's not recycled, initialize some attributes 

     gridView = new View(mContext); 

     // get layout from mobile.xml 
     gridView = inflater.inflate(R.drawable.status_button, null); 

     // set value into textview 
     TextView textView = (TextView) gridView 
       .findViewById(R.id.grid_item_label); 

     textView.setText("Status"); 


    } else { 
     //imageView = (ImageView) convertView; 
     gridView = (View) convertView; 

    } 

    return gridView; 

} 


} 

Répondre

1

Le sélecteur doit effectivement être défini dans votre dossier « dessinables » comme son propre fichier .xml. Ensuite, vous pouvez l'appeler comme ceci:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:background="@drawable/my_selector" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:padding="5dp" > 
+0

Merci, je l'ai fait et a ajouté un peu d'espace supplémentaire au fond des images et cela a fonctionné. J'ai aussi dû ajouter des espaces supplémentaires au début du texte pour l'aligner sur le centre, même si j'ai spécifié center_horizontal. Si vous connaissez une meilleure façon de le faire, puis ajouter des espaces laissez-moi savoir. – Andy

+0

Bien que votre largeur TextView indique «wrap_content», cela signifie que le centrage ne fera rien puisque votre TextView sera toujours (fondamentalement) de la même taille que votre texte. Vous aurez besoin de le mettre à "fill_parent" ou "match_parent" (selon l'API) afin de faire ce que vous voulez. –

Questions connexes