Android-自定义Toast消息的位置
我有一条祝酒词,默认设置是在屏幕的底部中间显示。我想知道如何定位它的顶部中心。有什么想法吗 感谢您来自: 您可以使用setGravity(int,int,int)更改此位置 方法它接受三个参数:重力常数和 x位置偏移和y位置偏移 例如,如果您决定祝酒词应出现在 左上角,可以按如下方式设置重力:Android-自定义Toast消息的位置,android,eclipse,toast,Android,Eclipse,Toast,我有一条祝酒词,默认设置是在屏幕的底部中间显示。我想知道如何定位它的顶部中心。有什么想法吗 感谢您来自: 您可以使用setGravity(int,int,int)更改此位置 方法它接受三个参数:重力常数和 x位置偏移和y位置偏移 例如,如果您决定祝酒词应出现在 左上角,可以按如下方式设置重力: toast.setGravity(Gravity.TOP|Gravity.LEFT, 0, 0); 如果你想轻推 向右移动位置,增加第二个参数的值。 若要向下移动,请增加最后一个参数的值 因此,在您的
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();
//创建toast对象
Toast myToast=Toast.makeText(getApplicationContext(),问候语[rndy.nextInt(6)],Toast.LENGTH\u SHORT);
//设置重力
myToast.setGravity(重力,水平中心)// 如果您不想使用最简单的方法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
中有一个名为的项目。如果你学习它,我想你会受到很多启发。我不久前在我的一个项目中实现了这一点。这会将烤面包放在您想要的任何视图的正下方。此方法通常用于覆盖按钮的长单击,以对按钮的功能进行简短描述
下面是我们想要打开的按钮
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);
}
是的,我读过文档,但我不确定要使用的x和y值,因为我认为它们会根据所使用的设备而有所不同??顺便说一句,酷Zoso符号:)Led Zep@ub3rfunk:使用0和0的值,但不要使用重力。左
用于水平居中。如@commonware所说,使用0,0。如果你读了文件aboev的最后一段,它说x,y用于推动位置=轻微改变。使用重力标志进行一般定位。确定。我应该把代码行放在哪里?这是我现在的toast消息:toast.makeText(getApplicationContext(),问候语[rndy.nextInt(6)],toast.LENGTH\u SHORT.show();非常感谢@Melquiades提供的帮助,它现在运行得非常好……干杯!官方文档:查找setGravity()
可能重复的尝试使用setGravity(Gravity.TOP | Gravity.CENTER_HORIZONTAL,0,0);