Odpowiedzi:
Z dokumentacją ,
Pozycjonowanie Toast
Standardowe powiadomienie toast pojawia się w dolnej części ekranu, wyśrodkowane poziomo. Możesz zmienić tę pozycję za pomocą
setGravity(int, int, int)
metody. Akceptuje to trzy parametry:Gravity
stałą,x-position
przesunięcie iy-position
przesunięcie.Na przykład, jeśli zdecydujesz, że toast powinien pojawić się w lewym górnym rogu, możesz ustawić grawitację w następujący sposób:
toast.setGravity(Gravity.TOP|Gravity.LEFT, 0, 0);
Jeśli chcesz przesunąć pozycję w prawo, zwiększ wartość drugiego parametru. Aby przesunąć go w dół, zwiększ wartość ostatniego parametru.
Gravity.CENTER_VERTICAL
umieści toast na środku ekranu.
Jeśli pojawi się błąd wskazujący, że musisz wywołać makeText, następujący kod to naprawi:
Toast toast= Toast.makeText(getApplicationContext(),
"Your string here", Toast.LENGTH_SHORT);
toast.setGravity(Gravity.TOP|Gravity.CENTER_HORIZONTAL, 0, 0);
toast.show();
new Toast(context)
zamiastToast.makeText(...)
Możesz dostosować lokalizację swojego Toast za pomocą:
setGravity(int gravity, int xOffset, int yOffset)
To pozwala ci bardzo precyzyjnie określić, gdzie ma znajdować się Twoja Toast.
Jedną z najbardziej przydatnych rzeczy w parametrach xOffset i yOffset jest to, że można ich użyć do umieszczenia Toast względem określonego Widoku.
Na przykład, jeśli chcesz utworzyć niestandardowy Toast, który pojawia się na przycisku, możesz utworzyć funkcję podobną do tej:
// 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 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();
Powyższy kod pomoże u wyświetlić toast na środku ekranu lub zgodnie z twoim wyborem, po prostu ustaw grawitację według potrzeb
Uwaga: Do tego procesu musisz użyć obiektu Toast
Metodą zmiany koloru, położenia i koloru tła tostów jest:
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();
Wyjaśnienie linia po linii: https://www.youtube.com/watch?v=5bzhGd1HZOc
ustawianie tostów na górnym ekranie
toast.setView(view);
toast.setGravity(Gravity.BOTTOM , 0, 0); // here i am setting toast at bottom
toast.setDuration(Toast.LENGTH_LONG);
toast.show();
teraz na dole
toast.setView(view);
toast.setGravity(Gravity.BOTTOM , 0, 0); // here i am setting toast at bottom
toast.setDuration(Toast.LENGTH_LONG);
toast.show();
w ten sam sposób możemy ustawić toast w lewo, w prawo, a także w środku
Kliknij tutaj
// Niestandardowa klasa tostów, w której można wyświetlać niestandardowe lub domyślne tosty według potrzeb)
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();
}
}