2015-04-18 1 views
-2

У меня есть сообщение тоста, и настройка по умолчанию отображает его снизу на экране. Мне интересно, как разместить его в TOP-центре. Есть идеи?Android - Пользовательская настройка сообщения Toast Сообщение

Спасибо

+0

Официальный документ: [Android Toast] (https://developer.android.com/guide/topics/ui/notifiers/toasts.html) ищет 'setGravity()' – Bharatesh

+0

возможный дубликат [Как изменить положение Toast в Android?] (http://stackoverflow.com/questions/2506876/how-to-change-position-of-toast-in-android) – Melquiades

+0

Попробуйте использовать setGravity (Gravity.TOP | Gravity.CENTER_HORIZONTAL , 0, 0); –

ответ

3

От docs:

Вы можете изменить это положение с setGravity (INT, INT, INT) метод. Это принимает три параметра: константу силы тяжести, смещение по положению в позиции и смещение позиции y.

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

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

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

Так что в вашем случае, вы могли бы сделать:

//create toast object 
Toast myToast = Toast.makeText(getApplicationContext(), greetings[rndy.nextInt(6)], Toast.LENGTH_SHORT); 
//set gravity 
myToast.setGravity(Gravity.CENTER_HORIZONTAL); //<-- set gravity here 
//and show it 
myToast.show(); 
+0

Да, я прочитал документ, но я не уверен в значениях x и y, потому что я думаю, что они будут меняться в зависимости от используемого устройства ?? BTW cool Zoso symbol :) Led Zep !! – zombetelgeuse

+1

@ ub3rfunk: используйте значения 0 и 0, но [используйте 'Gravity.CENTER_HORIZONTAL'] (https://developer.android.com/reference/android/view/Gravity.html#CENTER_HORIZONTAL) вместо' Gravity.LEFT' для горизонтального центрирования. – CommonsWare

+1

Как @CommonsWare сказал, используйте 0,0. Если вы прочитали последний абзац из docs aboev, он говорит, что x, y используются для подталкивания позиции = слегка меняются. Используйте флаги Gravity для общего позиционирования. – Melquiades

1

Если вы не хотите использовать самый простой способ Toast toast = Toast.makeText(context, text, duration).show(), вы можете настроить Toast. Вот мои коды, вы можете попробовать это:

Toast toast = new Toast(getApplicationContext()); 
toast.setGravity(Gravity.CENTER_VERTICAL, 0, 0); 
toast.setDuration(Toast.LENGTH_LONG); 
toast.setView(layout); 
toast.show(); 

Если вы все еще не содержание, есть проект в Github называется SuperToast. Если вы изучите это, я думаю, вы будете вдохновлены много.

1

Я реализовал это некоторое время назад для одного из моих проектов. Это ставит тост прямо под любым видом, который вы хотите. Такой подход обычно используется для переопределения долго нажать кнопку, чтобы дать краткое описание того, что делает

Ниже кнопка кнопка, где мы хотим

private View.OnLongClickListener mShareFriendsOnLongClickListener = new View.OnLongClickListener() { 
    @Override 
    public boolean onLongClick(View v) { 
     int offsetY = 10;//getResources().getDimensionPixelSize(R.dimen.toast_offset_y); 

     Toast toast = Toast.makeText(mContext, R.string.share_with_friends, Toast.LENGTH_SHORT); 
     ScrapbookUtils.positionToast(toast, v, getWindow(), 0, offsetY); 
     toast.show(); 
     return true; 
    } 
}; 

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

public static void positionToast(Toast toast, View view, Window window, int offsetX, int offsetY) { 
    // toasts are positioned relatively to decor view, views relatively to their parents, we have to gather additional data to have a common coordinate system 
    Rect rect = new Rect(); 
    window.getDecorView().getWindowVisibleDisplayFrame(rect); 
    // covert anchor view absolute position to a position which is relative to decor view 
    int[] viewLocation = new int[2]; 
    view.getLocationInWindow(viewLocation); 
    int viewLeft = viewLocation[0] - rect.left; 
    int viewTop = viewLocation[1] - rect.top; 

    // measure toast to center it relatively to the anchor view 
    DisplayMetrics metrics = new DisplayMetrics(); 
    window.getWindowManager().getDefaultDisplay().getMetrics(metrics); 
    int widthMeasureSpec = MeasureSpec.makeMeasureSpec(metrics.widthPixels, MeasureSpec.UNSPECIFIED); 
    int heightMeasureSpec = MeasureSpec.makeMeasureSpec(metrics.heightPixels, MeasureSpec.UNSPECIFIED); 
    toast.getView().measure(widthMeasureSpec, heightMeasureSpec); 
    int toastWidth = toast.getView().getMeasuredWidth(); 

    // compute toast offsets 
    int toastX = viewLeft + (view.getWidth() - toastWidth)/2 + offsetX; 
    int toastY = viewTop + view.getHeight() + offsetY; 

    toast.setGravity(Gravity.LEFT | Gravity.TOP, toastX, toastY); 
}