2010-03-24 11 views
202

Cuando uso Toast para mostrar un poco de 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.¿Cómo cambiar la posición de Toast en Android?

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

¿Alguien puede ayudarme a saber cómo lograr esto?

Respuesta

342

De the documentation,

Colocación del pan tostado

Aparece una notificación tostadas estándar en la parte inferior de la pantalla, centrado horizontalmente. Puede cambiar esta posición con el método setGravity(int, int, int). Esto acepta tres parámetros: una constante Gravity, una compensación x-position y una compensación y-position.

Por ejemplo, si decide que el pan debe aparecer en la esquina superior izquierda, puede establecer la gravedad de esta manera:

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

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

+9

¿Cuáles son los valores enteros allí? ¿Son dpi? o cual es el maximo? – clifgray

+8

Podría estar señalando lo obvio, pero 'Gravity.CENTER_VERTICAL' pondrá la tostada en el medio de la pantalla. – Felix

+3

xey están en píxeles, por lo que el máximo es el ancho/alto de la pantalla. – bluewhile

115

Como acotación al margen, si usted consigue lo que indica el error que se debe llamar Maketext, el siguiente código hace que funcione:

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

makeText devuelve un objeto Toast, por lo que simplemente puede agregar .addGravity y .show después de makeText. – NikkyD

+1

_ "si obtiene el error que indica que debe llamar a makeText" _ - ¿cuándo aparecerá el error? –

+1

El error ocurre si usa el Constructor tan 'nuevo Toast (contexto)' en lugar 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(); 

El código anterior es ayudará u para desplegar el pan tostado en el centro de la pantalla o de acuerdo a la opción del ur para que acaba de establecer la gravedad tostadas según la necesidad ur

Nota: para este proceso u tiene que utilizar el objeto de pan tostado

11

Puede personalizar la ubicación de su pan tostado mediante el uso de:

setGravity(int gravity, int xOffset, int yOffset)

docs

Esto le permite ser muy específico acerca de dónde desea que la ubicación de su pan tostado que sea.

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 usted quiere hacer un pan tostado personalizado que aparece en la parte superior de un botón, se 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();  
} 
+2

Esta respuesta http://stackoverflow.com/a/21026866/630833, toma el tamaño de Toast en consideración, lo cual fue útil para mí. – jayeffkay

+0

Este es un gran ejemplo. Gracias. – wonsuc

1

establecer tostada en la pantalla topin

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 establecer el tostado a la izquierda, a la derecha y también al centro

Haga clic here

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

El método para cambiar el color, la posición y el fondo de pan tostado 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(); 

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

+0

Si bien este enlace puede responder la pregunta, es mejor incluir las partes esenciales de la respuesta aquí y proporcionar el enlace de referencia. Las respuestas de solo enlace pueden dejar de ser válidas si la página vinculada cambia. –

+0

Si bien este enlace puede responder a la pregunta, es mejor incluir las partes esenciales de la respuesta aquí y proporcionar el enlace de referencia. Las respuestas de solo enlace pueden dejar de ser válidas si la página vinculada cambia. - [De la opinión] (/ reseña/mensajes de baja calidad/16825296) –

0

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

     } 
Cuestiones relacionadas