¿Cómo cambiar la posición de Toast en Android?

Cuando uso Toast para mostrar un texto emergente en la pantalla, muestra el texto un poco por encima de la parte inferior de la pantalla, que es la posición predeterminada.

Ahora quiero mostrarlo en el medio de la pantalla o en algún lugar de acuerdo con mi elección.

¿Alguien puede guiarme cómo lograr esto?

De la documentación ,

Posicionando su tostada

Aparece una notificación de tostado estándar cerca de la parte inferior de la pantalla, centrada horizontalmente. Puede cambiar esta posición con el setGravity(int, int, int) . Esto acepta tres parámetros: una constante de Gravity , un desplazamiento de la x-position un desplazamiento de la x-position y.

Por ejemplo, si decide que la tostada debe aparecer en la esquina superior izquierda, puede configurar la gravedad de esta manera:

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

Si desea empujar la posición hacia la derecha, aumente el valor del segundo parámetro. Para empujarlo hacia abajo, aumente el valor del último parámetro.

Por otro lado, si obtiene el error que indica que debe llamar a makeText, el siguiente código lo hace funcionar:

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

Puede personalizar la ubicación de su Toast usando:

setGravity(int gravity, int xOffset, int yOffset)

documentos

Esto le permite ser muy específico sobre dónde quiere que esté la ubicación de su Toast.

Una de las cosas más útiles acerca de los parámetros xOffset y yOffset es que puede usarlos para colocar el Toast relativo a una determinada Vista.

Por ejemplo, si desea hacer una tostada personalizada que aparece sobre un botón, puede crear una función como esta:

 // 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(); } 
 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(); 

El código anterior le ayudará a mostrar las tostadas en el medio de la pantalla o, de acuerdo con su elección, para eso simplemente establezca la gravedad de la tostada de acuerdo con su necesidad

Nota: para este proceso debes usar el objeto de Toast

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

poner pan tostado en la pantalla de arriba

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

ahora en la parte inferior

  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 misma manera que podemos preparar tostadas a la izquierda, a la derecha y también al centro

Haga clic aquí

El método para cambiar el color, la posición y el color de fondo de la tostada es:

 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(); 

Para explicación de línea por línea: https://www.youtube.com/watch?v=5bzhGd1HZOc

// Una clase de brindis personalizada donde puede mostrar tostadas personalizadas o predeterminadas según lo desee)

 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(); } }