2010-08-06 5 views
2

J'ai rencontré des difficultés lors de l'implémentation d'une boîte de dialogue de progression personnalisée. Même si une superposition intercepte des événements tactiles, l'utilisateur peut toujours actionner la boule de commande et cliquer sur les éléments censés être désactivés.Désactiver le clic du trackball dans Android

Y a-t-il un moyen de contourner ce problème?

Edit: voici une solution

//===================================================================================== 
protected void showProgressIndicator() 
{ 
    progressIndicator_.show(); 
} 

//===================================================================================== 
@Override 
public boolean onTrackballEvent(MotionEvent event) 
{ 
    return progressIndicator_.getVisibility() == View.VISIBLE; 
} 

//===================================================================================== 
protected void hideProgressIndicator() 
{ 
    progressIndicator_.hide(); 
} 

Une puis dans la méthode show

//===================================================================================== 
public void show() 
{ 
    setVisibility(VISIBLE); 
    if (animationHandler_ != null) 
     return; 

    animationHandler_ = new Handler(); 
    animationHandler_.post(animateTask_); 
    requestFocus(); 
} 

Répondre

0

Vérifiez la méthode onTrackballEvent(). Ensuite, essayez de retourner directement vrai dans la méthode sans rien y faire. Cela devrait tuer l'événement tout de suite.

+0

Votre solution n'est pas précisément correcte car l'utilisateur ne peut pas naviguer avec la trackball de cette façon mais il peut cliquer dessus. Donc, si un bouton est concentré, il peut toujours cliquer dessus. La solution consistait simplement à demander des foucs à partir de la boîte de dialogue de progression et à implémenter nTrackballEvent(). Merci pour vos conseils :) –

+0

pouvez-vous s'il vous plaît poster la solution? – Pria

+0

Une chance que vous pourriez afficher le code général? –

0

La substitution de onTrackballEvent() ne fonctionne pas. Essayez de surcharger dispatchTrackballEvent(), ne faites rien dedans juste retournez true ;.

1

Afin d'éviter que votre trackball ne fasse quoi que ce soit pendant que votre activité est à l'écran, ajoutez le code suivant à votre sous-classe Activity.

@Override 
public boolean dispatchTrackballEvent(android.view.MotionEvent ev) { 
    return true; 
}; 

J'ai testé cela sur un téléphone Google Nexus One et cela fonctionne très bien.

+0

puis-je désactiver trackball dans l'émulateur en utilisant cette technique? –

+1

@MoJo cela fonctionne car il surcharge le pair et n'appelle pas la classe de base. Le retour vrai est également important car il indiquera à Android que vous avez mangé l'événement. – ForceMagic

Questions connexes