J'ai créé un bouton personnalisé dans l'extension de la classe code> code> comme spécifié dans ce tutoriel:
http : //kahdev.wordpress.com/2008/09/13/making-a-custom-android-button-utilisateur-a-custom-view/ P> blockQuote>
mais j'ai un problème avec la fonction
oncocuschanged () code> qui n'est jamais appelé. p>Ceci est mon code: p>
xxx pré> En fait, lorsque je clique sur mon bouton personnalisé, rien ne se produit ... avec le débogueur, je peux voir que La fonction n'est jamais appelée. Et je ne sais pas pourquoi. P>
Alors, j'ai oublié une étape? Y a-t-il une autre chose que j'ai manquée? P> p>
3 Réponses :
Les DOCS disent "lors du dépassement, assurez-vous d'appeler à la superbe classe afin que la manipulation de mise au point standard se produise." Vous avez omis que l'appel dans votre code ci-dessus, quelque chose comme ci-dessous devrait aider.
@Override
protected void onFocusChanged(boolean gainFocus, int direction, Rect previouslyFocusedRect)
{
if (gainFocus == true)
{
this.setBackgroundColor(Color.rgb(255, 165, 0));
}
else
{
this.setBackgroundColor(Color.BLACK);
}
super.onFocusChanged(gainFocus, direction, previouslyFocusedRect);
}
J'ai essayé cela, mais cela ne fonctionne toujours pas. Avec le débogueur, la fonction n'est jamais appelée. J'ai également essayé de mettre l'appel à la superbe classe avant mon traitement, mais cela fait la même chose.
Dans quel type de conteneur est votre bouton personnalisé?
Mon bouton personnalisé est dans une linearlayout contenue dans un autre linearlayout.
Y a-t-il un autre contrôle là-bas qui peut capturer l'événement Onfocuschanged à la place?
Dans la première linearlayout, j'ai un linearlayout contenant mon bouton personnalisé et un framelayout contenant un bouton. Je vais essayer avec la suppression du bouton.
J'ai donc essayé de supprimer le bouton qui se trouve dans le Framelayout, mais cela ne fonctionne toujours pas ... La fonction Onfocuschanged () n'est pas appelée.
Essayez de mettre l'appel à super.onfocuschanged () avant le reste du code dans votre méthode
En fait, le problème était que je n'ai pas défini la propriété "Fonctionnement en mode tactile" de mon bouton personnalisé à vrai. J'ai ajouté dans le constructeur setfocusableintouchmode (true); code> et ça fonctionne mieux. Merci de votre aide.
En fait, le problème était que je n'ai pas défini la propriété "Fonctionnement en mode tactile" de mon bouton personnalisé à vrai. J'ai ajouté dans le constructeur setfocusableintouchmode (true); code> et ça fonctionne mieux. Merci Phil et Vicki D pour votre aide. public class CustomButton extends View
{
...
public CustomButton(Context context, Car car)
{
super(context);
setFocusable(true);
setFocusableInTouchMode(true); // Needed to call onFocusChanged()
setBackgroundColor(Color.BLACK);
setOnClickListener(listenerAdapter);
setClickable(true);
}
@Override
protected void onFocusChanged(boolean gainFocus, int direction,
Rect previouslyFocusedRect)
{
if (gainFocus == true)
{
this.setBackgroundColor(Color.rgb(255, 165, 0));
}
else
{
this.setBackgroundColor(Color.BLACK);
}
super.onFocusChanged(gainFocus, direction, previouslyFocusedRect);
}
...
}
Vous devez Setonfocuschangelistener code> dans votre constructeur. quelque chose comme ceci:
L'événement de mise au point n'est pas lié à l'événement de clic. Si vous voulez faire quelque chose lorsque vous cliquez sur le bouton, ajoutez un auditeur OnClick.