Вопрос

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

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

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

Это было полезно?

Решение

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

Позиционируя ваш тост

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

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

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

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

Другие советы

Если вы получите ошибку, указывающая, что вы должны вызвать Maketext, следующий код исправит:

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

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

setGravity(int gravity, int xOffset, int yOffset)

документы

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

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

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

// 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 toast = Toast.makeText(test.this,"bbb", Toast.LENGTH_LONG);
 toast.setGravity(Gravity.CENTER, 0, 0);
 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();

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

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

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

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

Настройка тоста на экране 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();  

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

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

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

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

        }
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top