如何制作自定义宽度的提示框?

29

如何使自定义提示通知填充屏幕的宽度?

我尝试了多种方法,但都无法实现。

谢谢。

6个回答

82

这应该可以工作:

Toast t = Toast.makeText(this, "Hello", Toast.LENGTH_SHORT);
t.setGravity(Gravity.FILL_HORIZONTAL, 0, 0);

这个可以正常工作,但是toast显示为center_horizontal。我们能同时使用Fill_Horizontal和BOTTOM吗? - Kai Wang
4
你可以像这样添加 | 运算符:toast.setGravity(Gravity.FILL_HORIZONTAL | Gravity.BOTTOM, 0, 0); - Cody
3
很遗憾,如果消息很长,由于某种原因,它不会遵循Gravity.BOTTOM,而是在Toast下方留下一行文本的间隙。这非常令人沮丧! - Jake Lee
@JakeSteam,你找到下面吐司空白的问题解决方案了吗? - ctor
@ctor 那是3年前的事了,我实在记不清了。抱歉朋友。 - Jake Lee
老旧但仍然可用。谢谢! - neo

8

你可以使用自定义布局和fill_horizontal创建Toast。以下代码在适配器类中编写,并且运行良好。

            LayoutInflater inflater =(LayoutInflater)mContext
                                     .getSystemService(mContext.LAYOUT_INFLATER_SERVICE);
            View layout =inflater.inflate(R.layout.custom_toast_layout,null);

            TextView text = (TextView) layout.findViewById(R.id.text);
            text.setText("Hello! This is a custom toast!");

            Toast toast = new Toast(mContext);

            //use both property in single function
            toast.setGravity(Gravity.BOTTOM|Gravity.FILL_HORIZONTAL, 0, 0);
            toast.setDuration(Toast.LENGTH_LONG);
            toast.setView(layout);
            toast.show();

在Kotlin中,您可以这样做:setGravity(Gravity.TOP or Gravity.FILL_HORIZONTAL, 0, 0) - Jerry Okafor

2

1

请查看此示例,了解带边框的自定义Toast。


0
我建议您创建一个对话框或者一个活动(使用对话框主题或类似对话框主题的样式),然后显示它。
在oncreate中使用计时器,在时间到达后调用finish()

0

尝试像这样做...

    wM = (WindowManager) context.getApplicationContext()
                .getSystemService(Context.WINDOW_SERVICE);
        mParams = new WindowManager.LayoutParams();
        LayoutInflater inflate = (LayoutInflater) context
                .getApplicationContext().getSystemService(
                        Context.LAYOUT_INFLATER_SERVICE);
        v = inflate.inflate(R.layout.custom_toast, null);
        // Set the layout to be like a toast window!
    mParams.gravity = Gravity.WHEREVER YOU WANT IT TO BE
            mParams.height = 200;
    mParams.width = WindowManager.LayoutParams.FILL_PARENT;
    mParams.flags = WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL;
    mParams.format = PixelFormat.OPAQUE;
    mParams.type = WindowManager.LayoutParams.TYPE_TOAST;

            wm.addView(v);

            <Timer or whatever>

            wm.removeView(v);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接