Как изменить положение тоста в Android?


279

Когда я использую Toastдля отображения некоторого всплывающего текста на экране, он отображает текст немного выше нижней части экрана, который является позицией по умолчанию.

Теперь я хочу отобразить его в середине экрана или где-то по своему выбору.

Кто-нибудь может подсказать мне, как этого добиться?

Ответы:


410

Из документации ,

Расположение вашего тоста

Стандартное уведомление о тостах появляется в нижней части экрана по центру по горизонтали. Вы можете изменить эту позицию с помощью setGravity(int, int, int)метода. Это принимает три параметра: Gravityконстанта, x-positionсмещение и y-positionсмещение.

Например, если вы решите, что тост должен появиться в верхнем левом углу, вы можете установить гравитацию следующим образом:

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

Если вы хотите сместить позицию вправо, увеличьте значение второго параметра. Чтобы уменьшить его, увеличьте значение последнего параметра.


11
Какие целочисленные значения там? Они dpi? или что такое макс?
Клифгрей

9
Может быть, указывает на очевидное, но Gravity.CENTER_VERTICALпоставит тост в середине экрана.
Феликс

3
Смещение по x и y указано в пикселях, поэтому максимальная ширина / высота вашего дисплея.
Bluewhile

2
@ Pentium10 В документе указано, что смещения указаны в пикселях. Должен ли я считать, что это единицы «px», а не «dp»?
батбрат

Мои тостовые сообщения на моем новом galaxy s6 показывают в 2 разных положениях. сначала в левой горизонтальной центральной вертикали, а затем перемещается вниз к центральной горизонтали, нижней вертикали. этот эффект не происходит ни на одном из моих старых тестовых устройств. Я отображаю каждое сообщение дважды в строке, так как любое
нажатие на

150

Если вы получите сообщение об ошибке, указывающее на необходимость вызова makeText, это исправит следующий код:

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

1
makeText возвращает объект Toast, так что вы можете просто добавить .addGravity и .show после makeText.
NikkyD

1
«если вы получите ошибку, указывающую, что вы должны вызвать makeText» - когда эта ошибка появится?
Яцек Ласковски

1
Ошибка происходит, если вы используете конструктор, new Toast(context)а неToast.makeText(...)
bluewhile

16

Вы можете настроить местоположение вашего тоста, используя:

setGravity(int gravity, int xOffset, int yOffset)

документы

Это позволяет вам очень точно указать, где вы хотите разместить тост.

Одна из наиболее полезных особенностей параметров xOffset и yOffset заключается в том, что вы можете использовать их для размещения тоста относительно определенного представления.

Например, если вы хотите создать собственный тост, который появляется поверх кнопки, вы можете создать такую ​​функцию:

// 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
В этом ответе stackoverflow.com/a/21026866/630833 учитывается размер тоста, который был мне полезен.
Jayeffkay

Это отличный пример. Спасибо.
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();

Приведенный выше код поможет вам отобразить тост в центре экрана или в соответствии с вашим выбором, для этого просто установите гравитацию тоста в соответствии с вашими потребностями

Примечание: для этого процесса вы должны использовать объект Toast


3

Метод для изменения цвета, положения и цвета фона тоста:

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

Для построчного объяснения: https://www.youtube.com/watch?v=5bzhGd1HZOc


Хотя эта ссылка может ответить на вопрос, лучше включить сюда основные части ответа и предоставить ссылку для справки. Ответы, содержащие только ссылки, могут стать недействительными, если связанная страница изменится.
greg-449

2

установка тоста на экране topin

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

сейчас внизу

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

так же, как мы можем установить тост слева, справа и в центре

Нажмите здесь


0

// Пользовательский класс тостов, где вы можете показывать пользовательский тост или тост по умолчанию

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

        }
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.