2010-03-24 5 views
202

Lorsque j'utilise Toast pour afficher du texte contextuel à l'écran, il affiche le texte un peu au-dessus du bas de l'écran, qui est la position par défaut.Comment changer la position de Toast dans Android?

Maintenant, je veux l'afficher au milieu de l'écran ou quelque part selon mon choix.

Quelqu'un peut-il me guider comment y parvenir?

Répondre

342

De the documentation,

Positionnement Toast

Une notification de pain grillé standard apparaît au bas de l'écran, centrée horizontalement. Vous pouvez changer cette position avec la méthode setGravity(int, int, int). Ceci accepte trois paramètres: une constante Gravity, un décalage x-position et un décalage y-position.

Par exemple, si vous décidez que le toast doit apparaître dans le coin supérieur gauche, vous pouvez définir la gravité comme celui-ci:

toast.setGravity(Gravity.TOP|Gravity.LEFT, 0, 0); 

Si vous voulez pousser la position à droite, augmentation la valeur de le deuxième paramètre. Pour le diminuer, augmentez la valeur du dernier paramètre .

+9

quelles sont les valeurs entières là? Sont-ils en dpi? ou quel est le maximum? – clifgray

+8

Peut-être souligner l'évidence, mais 'Gravity.CENTER_VERTICAL' mettra le toast au milieu de l'écran. – Felix

+3

Le décalage x et y est en pixel, le maximum est donc votre largeur/hauteur d'affichage. – bluewhile

115

En aparté, si vous obtenez l'erreur indiquant que vous devez appeler maketext, le code suivant fait fonctionner:

Toast toast= Toast.makeText(getApplicationContext(), 
"Your string here", Toast.LENGTH_SHORT); 
toast.setGravity(Gravity.TOP|Gravity.CENTER_HORIZONTAL, 0, 0); 
toast.show(); 
+0

makeText renvoie un objet Toast, vous pouvez donc simplement ajouter .addGravity et .show après le makeText. – NikkyD

+1

_ "si vous obtenez l'erreur indiquant que vous devez appeler makeText" _ - quand l'erreur apparaîtra-t-elle? –

+1

L'erreur se produit si vous utilisez le constructeur ainsi 'nouveau Toast (contexte)' au lieu de 'Toast.makeText (...)' – bluewhile

6
Toast mytoast= Toast.makeText(getApplicationContext(), "Toast Message", 1); 
mytoast.setGravity(Gravity.CENTER_HORIZONTAL, 0, 0); // for center horizontal 
//mytoast.setGravity(Gravity.CENTER_VERTICAL);  // for center vertical 
//mytoast.setGravity(Gravity.TOP);      // for top 
mytoast.show(); 

Le code ci-dessus est aidera u pour afficher des toasts dans la milieu de l'écran ou selon ur choix pour que juste régler la gravité de pain grillé selon ur besoin

note: pour ce processus u doivent utiliser l'objet de Toast

11

Vous pouvez personnaliser l'emplacement de votre Toast en utilisant:

setGravity(int gravity, int xOffset, int yOffset)

docs

Cela vous permet d'être très précis sur l'endroit où vous voulez que l'emplacement de votre Toast soit. L'une des choses les plus utiles à propos des paramètres xOffset et yOffset est que vous pouvez les utiliser pour placer le Toast par rapport à une certaine vue.

Par exemple, si vous voulez un toast personnalisé qui apparaît sur le dessus d'un bouton, vous pouvez créer une fonction comme ceci:

// v is the Button view that you want the Toast to appear above 
// and messageId is the id of your string resource for the message 

private void displayToastAboveButton(View v, int messageId) 
{ 
    int xOffset = 0; 
    int yOffset = 0; 
    Rect gvr = new Rect(); 

    View parent = (View) v.getParent(); 
    int parentHeight = parent.getHeight(); 

    if (v.getGlobalVisibleRect(gvr)) 
    {  
     View root = v.getRootView(); 

     int halfWidth = root.getRight()/2; 
     int halfHeight = root.getBottom()/2; 

     int parentCenterX = ((gvr.right - gvr.left)/2) + gvr.left; 

     int parentCenterY = ((gvr.bottom - gvr.top)/2) + gvr.top; 

     if (parentCenterY <= halfHeight) 
     { 
      yOffset = -(halfHeight - parentCenterY) - parentHeight; 
     } 
     else 
     { 
      yOffset = (parentCenterY - halfHeight) - parentHeight; 
     } 

     if (parentCenterX < halfWidth) 
     {   
      xOffset = -(halfWidth - parentCenterX);  
     } 

     if (parentCenterX >= halfWidth) 
     { 
      xOffset = parentCenterX - halfWidth; 
     } 
    } 

    Toast toast = Toast.makeText(getActivity(), messageId, Toast.LENGTH_SHORT); 
    toast.setGravity(Gravity.CENTER, xOffset, yOffset); 
    toast.show();  
} 
+2

Cette réponse http://stackoverflow.com/a/21026866/630833, prend la taille de Toast en considération, ce qui m'a été utile. – jayeffkay

+0

Ceci est un bon exemple. Merci. – wonsuc

1

réglage du pain grillé à l'écran Topin

toast.setView(view); 
toast.setGravity(Gravity.BOTTOM , 0, 0); // here i am setting toast at bottom 
toast.setDuration(Toast.LENGTH_LONG); 
toast.show(); 

de la même manière que nous pouvons définir toast dans gauche, droite et aussi centre

Cliquez here

4
Toast toast = Toast.makeText(test.this,"bbb", Toast.LENGTH_LONG); 
toast.setGravity(Gravity.CENTER, 0, 0); 
toast.show(); 
0

La méthode pour changer la couleur, la position et la couleur de fond de pain grillé est:

Toast toast=Toast.makeText(getApplicationContext(),"This is advanced toast",Toast.LENGTH_LONG); 
toast.setGravity(Gravity.BOTTOM | Gravity.RIGHT,0,0); 
View view=toast.getView(); 
TextView view1=(TextView)view.findViewById(android.R.id.message); 
view1.setTextColor(Color.YELLOW); 
view.setBackgroundResource(R.color.colorPrimary); 
toast.show(); 

Pour la ligne par ligne d'explication: https://www.youtube.com/watch?v=5bzhGd1HZOc

+0

Bien que ce lien puisse répondre à la question, il est préférable d'inclure les parties essentielles de la réponse ici et fournir le lien pour référence. Les réponses à lien uniquement peuvent devenir invalides si la page liée change. –

+0

Bien que ce lien puisse répondre à la question, il est préférable d'inclure les parties essentielles de la réponse ici et de fournir le lien pour référence. Les réponses à lien uniquement peuvent devenir invalides si la page liée change. - [De l'examen] (/ review/low-quality-posts/16825296) –

0

// Une coutume classe de pain grillé où vous pouvez montrer le pain grillé personnalisé ou par défaut comme désiré)

public class ToastMessage { 
      private Context context; 
      private static ToastMessage instance; 

      /** 
      * @param context 
      */ 
      private ToastMessage(Context context) { 
       this.context = context; 
      } 

      /** 
      * @param context 
      * @return 
      */ 
      public synchronized static ToastMessage getInstance(Context context) { 
       if (instance == null) { 
        instance = new ToastMessage(context); 
       } 
       return instance; 
      } 

      /** 
      * @param message 
      */ 
      public void showLongMessage(String message) { 
       Toast.makeText(context, message, Toast.LENGTH_SHORT).show(); 
      } 

      /** 
      * @param message 
      */ 
      public void showSmallMessage(String message) { 
       Toast.makeText(context, message, Toast.LENGTH_LONG).show(); 
      } 

      /** 
      * The Toast displayed via this method will display it for short period of time 
      * 
      * @param message 
      */ 
      public void showLongCustomToast(String message) { 
       LayoutInflater inflater = ((Activity) context).getLayoutInflater(); 
       View layout = inflater.inflate(R.layout.layout_custom_toast, (ViewGroup) ((Activity) context).findViewById(R.id.ll_toast)); 
       TextView msgTv = (TextView) layout.findViewById(R.id.tv_msg); 
       msgTv.setText(message); 
       Toast toast = new Toast(context); 
       toast.setGravity(Gravity.FILL_HORIZONTAL | Gravity.BOTTOM, 0, 0); 
       toast.setDuration(Toast.LENGTH_LONG); 
       toast.setView(layout); 
       toast.show(); 


      } 

      /** 
      * The toast displayed by this class will display it for long period of time 
      * 
      * @param message 
      */ 
      public void showSmallCustomToast(String message) { 

       LayoutInflater inflater = ((Activity) context).getLayoutInflater(); 
       View layout = inflater.inflate(R.layout.layout_custom_toast, (ViewGroup) ((Activity) context).findViewById(R.id.ll_toast)); 
       TextView msgTv = (TextView) layout.findViewById(R.id.tv_msg); 
       msgTv.setText(message); 
       Toast toast = new Toast(context); 
       toast.setGravity(Gravity.FILL_HORIZONTAL | Gravity.BOTTOM, 0, 0); 
       toast.setDuration(Toast.LENGTH_SHORT); 
       toast.setView(layout); 
       toast.show(); 
      } 

     } 
Questions connexes