Bạn có thể tùy chỉnh vị trí của Toast của bạn bằng cách sử dụng:
setGravity(int gravity, int xOffset, int yOffset)
docs
này cho phép bạn rất cụ thể về nơi bạn muốn vị trí của Toast của bạn được.
Một trong những điều hữu ích nhất về các tham số xOffset và yOffset là bạn có thể sử dụng chúng để đặt Toast tương ứng với một View nhất định.
Ví dụ, nếu bạn muốn thực hiện một Toast tùy chỉnh xuất hiện trên đỉnh của một Button, bạn có thể tạo một hàm như thế này:
// 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();
}
giá trị số nguyên ở đó là gì? Họ có phải là dpi không? hoặc tối đa là gì? – clifgray
Có thể chỉ ra rõ ràng, nhưng 'Gravity.CENTER_VERTICAL' sẽ đặt bánh mì nướng ở giữa màn hình. – Felix
x và y bù đắp bằng pixel, vì vậy tối đa là chiều rộng/chiều cao hiển thị của bạn. – bluewhile