在Android中,Toast的位置通常是根據屏幕的中心來顯示的。然而,如果你想要調整Toast的位置,可以通過以下方法實現:
創建一個自定義的Toast布局,設置其寬度、高度和邊距,以便將其放置在屏幕上的任何位置。
public class CustomToast {
public static void show(Context context, String message, int position) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View customToastView = inflater.inflate(R.layout.custom_toast, null);
TextView toastText = customToastView.findViewById(R.id.toast_text);
toastText.setText(message);
Toast toast = new Toast(context);
toast.setDuration(Toast.LENGTH_LONG);
toast.setView(customToastView);
// 設置Toast的位置
int screenWidth = context.getResources().getDisplayMetrics().widthPixels;
int screenHeight = context.getResources().getDisplayMetrics().heightPixels;
int toastWidth = customToastView.getMeasuredWidth();
int toastHeight = customToastView.getMeasuredHeight();
int xPosition, yPosition;
if (position == POSITION_TOP) {
xPosition = (screenWidth - toastWidth) / 2;
yPosition = 0;
} else if (position == POSITION_BOTTOM) {
xPosition = (screenWidth - toastWidth) / 2;
yPosition = screenHeight - toastHeight;
} else if (position == POSITION_LEFT) {
xPosition = 0;
yPosition = (screenHeight - toastHeight) / 2;
} else if (position == POSITION_RIGHT) {
xPosition = screenWidth - toastWidth;
yPosition = (screenHeight - toastHeight) / 2;
} else {
xPosition = (screenWidth - toastWidth) / 2;
yPosition = (screenHeight - toastHeight) / 2;
}
toast.setGravity(Gravity.TOP | Gravity.START, xPosition, yPosition);
toast.show();
}
}
在這個例子中,POSITION_TOP
、POSITION_BOTTOM
、POSITION_LEFT
和POSITION_RIGHT
分別表示Toast的頂部、底部、左側和右側位置。你可以根據需要調整這些值。
這種方法更為復雜,需要使用WindowManager來創建一個透明的窗口,并將Toast顯示在該窗口上。這種方法可能會影響其他應用程序的顯示效果,因此請謹慎使用。
首先,在AndroidManifest.xml中添加以下權限:
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
然后,創建一個類(例如FixedToast
),并在其中實現以下方法:
public class FixedToast {
private WindowManager windowManager;
private View toastView;
public FixedToast(Context context) {
windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
toastView = LayoutInflater.from(context).inflate(R.layout.custom_toast, null);
}
public void show(String message, int position) {
// 設置Toast的位置
// ...
// 將Toast添加到WindowManager
WindowManager.LayoutParams layoutParams = new WindowManager.LayoutParams(
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY,
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
PixelFormat.TRANSLUCENT);
layoutParams.gravity = Gravity.TOP | Gravity.START;
layoutParams.x = xPosition;
layoutParams.y = yPosition;
windowManager.addView(toastView, layoutParams);
// 設置Toast的顯示時長
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
windowManager.removeView(toastView);
}
}, 3000);
}
}
最后,在你的Activity或Fragment中使用FixedToast
類:
FixedToast fixedToast = new FixedToast(this);
fixedToast.show("Hello, world!", FixedToast.POSITION_TOP);
請注意,這種方法可能會導致與其他應用程序的沖突,因此在實際項目中要謹慎使用。