2010-08-24 5 views
0

J'ai besoin de créer une fonction similaire à Toast.makeText (...) mais plus rapide à disparaître. J'ai vu une telle boîte de message dans le logiciel "Le monde fr" lorsque vous sélectionnez un bouton de la barre d'outils. Son apparaître et disparaître très rapidement si vous passez à une autre icône. Je cherche à faire la même chose mais je ne sais pas comment faire. Messagebox ne devrait pas être modal, ce que je veux est une sorte d'info-bulle rapide. L'info-bulle devrait apparaître et disparaître rapidement. des idées ?Comment créer une boîte de message de suppression automatique rapide sous ANDROID?

+0

Cela pourrait vous aider: http://groups.google.com/group/android-developers/browse_thread/thread/edf69019754e565b – Pentium10

Répondre

4

Créer un objet Toast:

final Toast toast = Toast.makeText(this, "message", Toast.LENGTH_SHORT); 

Créer un objet Timer:

Timer timer = new Timer(); 

Créer une tâche qui annule l'objet Toast:

TimerTask task = new TimerTask() { 

    @Override 
    public void run() { 
    // make sure to cancel the Toast in UI thread 
    runOnUiThread(new Runnable() { 

     @Override 
     public void run() { 
     toast.cancel(); 
     } 
    }); 
    } 
}; 

Exécutez l'annuler tâche après spécifié période de temps

timer.schedule(task, 100); 
+0

Merci beaucoup, je peux essayer de voir ça. – Fabien

1

L'info-bulle peut être effectuée via PopupWindows. Je suppose que vous avez une grille d'icônes et que vous voulez fournir des astuces qui disparaissent en fonction de l'heure ou en cliquant sur une autre icône - corrigez-moi si je me trompe:

Créer une mPopupWindow globale et la rejeter avant de gonfler une nouvelle un à chaque fois. Vous pouvez utiliser des threads qui le rejettent pour vous en fonction de l'heure ou du code défini dans votre écouteur de défilement.

PopupWindow mPopupWindow = null; 

mIconButton.setOnClickListener(new OnClickListener() { 

       @Override 
       public void onClick(View v) { 
        if (mPopupWindow != null) { 
         mPopupWindow.dismiss(); 
         mPopupWindow = null; 
        } 

        TextView tv = new TextView(getApplicationContext()); 
        tv.setText(tooltipText); 
        tv.setCompoundDrawablesWithIntrinsicBounds(R.drawable.icon, 
          0, 0, 0); 
        mPopupWindow = new PopupWindow(tv); 

        mPopupWindow.setWindowLayoutMode(
          ViewGroup.LayoutParams.WRAP_CONTENT, 
          ViewGroup.LayoutParams.WRAP_CONTENT); 

        mPopupWindow.showAsDropDown(v); 

// write threads to disable it based on time as well 

       } 
      }); 
+0

Très interessant, je ne savais pas à ce sujet ! – Fabien

0

Avez-vous essayé de modifier la durée des notifications Toast?

Toast.makeText(context, "My message", Toast.LENGTH_SHORT).show(); 

Je me méfie d'avoir une notification apparaître et disparaître plus vite que tout ce que la courte durée est optimisé pour le temps minimum un utilisateur prend pour voir et lire le pain grillé.

+0

J'ai essayé, mais j'ai fait la barre d'outils à partir du widget galerie. Et je voulais quand vous faites défiler sur la barre d'outils pour afficher une infobulle très courte. La durée standard du toast LENGTH_SHORT est trop longue. Lorsque vous faites défiler rapidement jusqu'à la dernière image/bouton, vous pouvez toujours voir l'ancien texte de toast de l'image précédente sur la barre d'outils, car ils prennent beaucoup de temps à disparaître. – Fabien

0

vous pouvez le faire de cette façon. créer un toast personnalisé avec un textview (R.id.text). utilise une classe qui s'étend de la classe CountDownTimer pour contrôler la durée d'affichage du toast. par exemple: MyCount counter = new MyCount (5000,1000);

affichera le toast pendant 5 secondes. abaissez les valeurs pour obtenir les résultats souhaités.

LayoutInflater inflater = getLayoutInflater();

Afficher la présentation = inflater.inflate (R.layout.toastxml, (ViewGroup) findViewById (R.id.toast_layout_root)); toast = nouveau Toast (this); toast.setView (disposition);

TextView text = (TextView) layout.findViewById (R.id.text); Text.setText ("Bonjour, ceci est un toast personnalisé!");

Compteur MyCount = new MyCount (5000,1000); compteur.début();

classe mycount étend CountDownTimer {

public MyCount(long millisInFuture, long countDownInterval) { 
     super(millisInFuture, countDownInterval); 
    } 
    @Override 
    public void onFinish() { 
     toast.cancel(); 
    } 
     @Override 
     public void onTick(long millisUntilFinished) { 
      toast.show(); 
     } 
    } 
+0

aussi intéressant! – Fabien

Questions connexes