Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android-自定义Toast消息的位置_Android_Eclipse_Toast - Fatal编程技术网

Android-自定义Toast消息的位置

Android-自定义Toast消息的位置,android,eclipse,toast,Android,Eclipse,Toast,我有一条祝酒词,默认设置是在屏幕的底部中间显示。我想知道如何定位它的顶部中心。有什么想法吗 感谢您来自: 您可以使用setGravity(int,int,int)更改此位置 方法它接受三个参数:重力常数和 x位置偏移和y位置偏移 例如,如果您决定祝酒词应出现在 左上角,可以按如下方式设置重力: toast.setGravity(Gravity.TOP|Gravity.LEFT, 0, 0); 如果你想轻推 向右移动位置,增加第二个参数的值。 若要向下移动,请增加最后一个参数的值 因此,在您的

我有一条祝酒词,默认设置是在屏幕的底部中间显示。我想知道如何定位它的顶部中心。有什么想法吗

感谢您

来自:

您可以使用setGravity(int,int,int)更改此位置 方法它接受三个参数:重力常数和 x位置偏移和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();
//创建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);