Como mudar a posição do Toast no Android?


279

Quando uso Toastpara exibir algum texto pop-up na tela, ele exibe o texto um pouco acima da parte inferior da tela, que é a posição padrão.

Agora eu quero exibi-lo no meio da tela ou em algum lugar de acordo com minha escolha.

Alguém pode me orientar como conseguir isso?

Respostas:


410

A partir da documentação ,

Posicionando sua torrada

Uma notificação de brinde padrão aparece próxima à parte inferior da tela, centralizada horizontalmente. Você pode mudar esta posição com o setGravity(int, int, int)método Isso aceita três parâmetros: uma Gravityconstante, um x-positiondeslocamento e um y-positiondeslocamento.

Por exemplo, se você decidir que a torrada deve aparecer no canto superior esquerdo, poderá definir a gravidade da seguinte forma:

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

Se você deseja deslocar a posição para a direita, aumente o valor do segundo parâmetro. Para empurrá-lo para baixo, aumente o valor do último parâmetro.


11
quais são os valores inteiros lá? Eles são dpi? ou qual é o máximo?
— clifgray

9
Pode estar apontando o óbvio, mas Gravity.CENTER_VERTICALcolocará a torrada no meio da tela.
— Felix30

3
o deslocamento x e y estão em pixels; portanto, o máximo é a largura / altura da tela.
— bluewhile

2
@ Pentium10 Os documentos afirmam que os deslocamentos estão em pixels. Devo assumir que essas são unidades "px", em oposição às unidades "dp"?
— batbrat

Minhas mensagens de brinde na minha nova galáxia s6 são exibidas em duas posições diferentes. primeiro no centro horizontal esquerdo vertical e depois desce para o centro horizontal inferior vertical. esse efeito não ocorre em nenhum dos meus dispositivos de teste mais antigos. I exibir cada mensagem duas vezes na linha desde qualquer toques na tela matar o primeiro brinde imediatamente,.
— Androidcoder

150

Se você receber um erro indicando que deve chamar o makeText, o seguinte código o corrigirá:

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

1
O makeText retorna um objeto Toast, para que você possa simplesmente adicionar .addGravity e .show após o makeText.
— NikkyD 9/10/12

1
"se você receber o erro indicando que deve chamar o makeText" - quando o erro apareceria?
— Jacek Laskowski

1
O erro acontece se você usar o Construtor de modo new Toast(context)em vez deToast.makeText(...)
— bluewhile

16

Você pode personalizar o local do seu Toast usando:

setGravity(int gravity, int xOffset, int yOffset)

docs

Isso permite que você seja muito específico sobre onde deseja que o local do seu Toast esteja.

Uma das coisas mais úteis sobre os parâmetros xOffset e yOffset é que você pode usá-los para colocar o Toast em relação a uma determinada visualização.

Por exemplo, se você deseja fazer um Toast personalizado que aparece na parte superior de um botão, você pode criar uma função 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 resposta stackoverflow.com/a/21026866/630833 leva em consideração o tamanho do Toast, o que foi útil para mim.
— Jayeffkay #

Este é um excelente exemplo. Obrigado.
— wonsuc

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

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

O código acima ajudará você a exibir torradas no meio da tela ou de acordo com a sua escolha, pois isso apenas definirá a gravidade da torrada de acordo com sua necessidade

Nota: Para este processo você tem que usar o objeto Toast


3

O método para alterar a cor, posição e cor de fundo da torrada é:

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 explicação linha por linha: https://www.youtube.com/watch?v=5bzhGd1HZOc


Embora esse link possa responder à pergunta, é melhor incluir aqui as partes essenciais da resposta e fornecer o link para referência. As respostas somente para links podem se tornar inválidas se a página vinculada for alterada.
— greg-449

2

definindo o brinde na tela superior

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

agora no fundo

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

da mesma maneira que podemos colocar torradas na esquerda, direita e também no centro

Clique aqui


0

// Uma classe de brinde personalizada, na qual é possível mostrar brindes personalizados ou padrão, conforme desejado)

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

        }
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.