2011-05-07 4 views
1

Je veux faire un clic de pain grillé ou un élément en mesure de l'interface utilisateur qui aura bouton cliquable mais se comporte comme du pain grillé. Il ne devrait pas fonctionner sur le thread UI comme toast. Il ne devrait pas arrêter ou superposer l'activité de l'utilisateur en cours, le message devrait venir comme toast avec bouton cliquable et disparaître, mais comme l'utilisateur de toast devrait être en mesure d'accéder à l'article d'interface utilisateur en cours.Android- Faire Toast cliquable

Si quelqu'un a une idée sur la façon d'y parvenir pls partager avec moi.

+0

@Max whaat est ce grille-pain USB ??? – om252345

Répondre

1

Mettez votre mise en page principale dans un FrameLayout. Ecrire une mise en page pour votre toast, avec le bouton et tout, l'insérer dans le FrameLayout (ci-dessous votre disposition principale) et définir sa visibilité à GONE.

Lorsque vous le montrer (réglage de visibilité à VISIBLE) lancer un nouveau thread qui compte à rebours les secondes jusqu'à ce que son rejeté. Remettez-le à invisible à partir du thread via un gestionnaire (car tous les éléments de l'interface utilisateur ne peuvent être gérés qu'à partir du thread principal).

bravo!

+0

Je veux un élément de l'interface utilisateur comme toast donnera accès à l'activité en cours tout en affichant le message. Comme si je jouais à un jeu ou tapais ou regardais quelque chose sur le marché, le message de Toast ne me limitera pas pour accéder à ce travail en cours, ne met pas en pause le jeu mais montre le message en même temps. Toast n'a pas d'article clickabke mais je veux faire la même fonctionnalité que toast mais avoir un bouton cliquable dessus ... – om252345

+0

Oui, et c'est exactement ce que cela fait. Il montre une vue sur le dessus de votre disposition principale. Rien n'est arrêté, tout est encore accessible (sauf ce qui se trouve directement sous la nouvelle vue bien sûr). Mais vous pouvez aussi consulter le PopupWindow. Je n'en ai jamais entendu parler auparavant, mais il semble que ce soit une façon beaucoup plus pratique de faire ce que vous voulez. – pumpkee

+0

ok Je vais essayer les deux, merci ... – om252345

2

J'ai eu une exigence similaire que je résolus à l'aide d'un popupWindow. Fondamentalement, j'avais une fenêtre avec un lien cliquable que je voulais afficher comme un toast. La fenêtre peut accomplir cela comme suit:

Dans la classe parente, j'utilise le drapeau suivant:

private boolean durationExpired = false; 

Alors, quand j'invoque ce qui aurait été le pain grillé, je fais ce qui suit à la place:

LayoutInflater inflater = getLayoutInflater(); 
View layout = inflater.inflate(R.layout.about_hiittimer, 
    (ViewGroup) findViewById(R.id.about_hiittimer)); 
TextView url = (TextView) layout.findViewById(R.id.url); 
url.setMovementMethod(LinkMovementMethod.getInstance()); 

final PopupWindow popupWindow = new PopupWindow(layout, 280, 160, false); 
popupWindow.showAtLocation(layout, 17, 0, 0); 
popupWindow.setTouchable(true); 
popupWindow.setOutsideTouchable(true); 

final Handler popupHandler = new Handler(); 
runOnUiThread(new Runnable() { 
    @Override 
    public void run() { 
     if (!durationExpired) { 
      durationExpired = true; 
      popupHandler.postDelayed(this, 2000); 
     } else { 
      popupWindow.dismiss(); 
      popupHandler.removeCallbacks(this); 
      durationExpired = false; 
     } 
    } 
}); 
+0

Vous pouvez mettre le 'durationExpired' dans le' Runnable' afin qu'il soit plus encapsulé. – TWiStErRob

0

Petite astuce. Testé fonctionnant Android 4.4

toast = new Toast(context); 
try { 
    Class<?> clazz = Class.forName("android.widget.Toast"); 
    Method method = clazz.getDeclaredMethod("getWindowParams"); 
    WindowManager.LayoutParams param = (WindowManager.LayoutParams) method.invoke(toast); 
    param.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE 
      | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON; 
} catch (Exception e) { 
    e.printStackTrace(); 
}