Android drawSelectorOnTop avec GridView
Je suis en train d'élaborer des onglets de l'application dans laquelle l'un des fragments, CollectionsFragment, contient un GridView avec une ImageView dans chaque logement. Je voudrais l'utiliser un sélecteur de donner de la rétroaction des utilisateurs lorsque l'utilisateur clique sur une des images.
J'ai mis en œuvre avec succès le sélecteur, cependant, mon problème est que le sélecteur est seulement le dessin en arrière-plan de l'image, mais je tiens à le sélecteur de tirer sur toute l'image. J'ai vu ce problème référencé ailleurs, cependant, la solution choisie par de nombreux, la définition de la drawSelectorOnTop propriété de la GridView, n'est pas de travail pour moi.
Pertinentes fragment avec le code d'adaptateur:
public class CollectionsFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.activity_collections, container, false);
//Grid view is inside the xml view inflated above
GridView gridView = (GridView)view.findViewById(R.id.gridview);
gridView.setDrawSelectorOnTop(true);
((GridView) gridView).setAdapter(new CustomGridViewAdapter(getActivity()));
return view;
}
private class CustomGridViewAdapter extends BaseAdapter {
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
View v = view;
ImageView picture;
TextView name;
if(v == null) {
v = inflater.inflate(R.layout.collections_item, viewGroup, false);
v.setTag(R.id.picture, v.findViewById(R.id.picture));
v.setTag(R.id.text, v.findViewById(R.id.text));
}
picture = (ImageView)v.getTag(R.id.picture);
name = (TextView)v.getTag(R.id.text);
Item item = (Item)getItem(i);
name.setText(item.name);
picture.setImageResource(item.drawableId);
picture.setBackgroundResource(R.drawable.selector);
return v;
}
}
}
Et mon sélecteur par souci d'exhaustivité:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true"
android:drawable="@color/buttonhighlight"/> <!-- pressed state -->
<item android:state_focused="true"
android:drawable="@color/buttonhighlight"/> <!-- focused state -->
<item android:drawable="@android:color/transparent"/> <!-- default state -->
</selector>
Merci pour toute aide,
OriginalL'auteur lbrendanl | 2013-11-27
Vous devez vous connecter pour publier un commentaire.
Je pense que vous vous trompez sur
setDrawSelectorOnTop(boolean)
. Leselector
drawable qui est référencé ici est GridView interneselector
drawable.Même dans le plus simple de mise en œuvre de
GridView
, lorsqu'un élément est cliqué, la bordure bleue est dessiné autour d'elle. C'est parce que, par défaut, gridview propre sélecteur est tirébehind
l'élément. Si vous appelezsetDrawSelectorOnTop(true)
, le sélecteur (bleu) sera affichée sur l'élément.Mais
setDrawSelectorOnTop(boolean)
n'a rien à voir avec le sélecteur de réglage de l'adaptateur. Si vous passertrue
, oufalse
, l'ImageView du sélecteur de comportement ne change pas.Solution:
Au lieu de mettre le sélecteur sur chaque ImageView à l'intérieur de la carte, faire le contrôle GridView utilisation du sélecteur drawable:
Maintenant, il n'y a pas besoin d':
Edit:
Bien que je ne recommande pas (évident de frais généraux), cela devrait fonctionner:
cela devrait fonctionner. La seule chose que je peux penser à où vous avez fait une erreur, c'est que vous devez utiliser
gridView.setSelector(R.color.buttonhighlight));
au lieu de l'exemple de codegridView.setSelector(getResources().getDrawable(R.drawable.selector));
dans cette réponse, exactement.Désolé, mon erreur .. je vois qu'il y a un selector.xml dans votre question maintenant. Ma suggestion pour essayer
R.color.buttonhighlight
que le sélecteur est seulement bon pour le dépannage, je suppose 🙂J'utilise moi-même et il fonctionne comme prévu. Avez-vous essayé de suivre
Joe's
des conseils?Grâce Vikram super!
OriginalL'auteur Vikram
Essayer de régler le xml
attribute android:drawSelectorOnTop
dans votreactivity_collections.xml
fichierVoir si le positionnement
gridView.setDrawSelectorOnTop(true);
aprèsgridView.setAdapter();
aide. Parfois, l'ordre des questions (bizarre)Si tout le reste échoue, vous devrez basculer GridView à un autre point de vue où setDrawSelectorOnTop() est prouvée à travailler de manière cohérente.
HTH
Regardez le code source de l'Application Gallery - il a un GridView et fait exactement ce dont vous avez besoin. Dans l'Application Galerie, lorsque vous essayez de sélectionner plusieurs photos de l'Album, à l'effet que vous voyez est similaire à ce que vous essayez d'atteindre, à droite? C'est un GridView qu'ils utilisent là-bas et le code source est ouvert et disponible.
OriginalL'auteur VJ Vélan Solutions