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;
}
}
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
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. –