显示没有 window 的吐司

Displaying a toast without window

我的应用程序不寻常:当它启动时,它只显示一条 Toast 消息。 也就是说,我必须单击启动图标,查看 Toast,仅此而已。 但是启动后,我不到一秒钟,就看到了主应用程序 window,它根本不应该显示 - 只有 Toast!它显示并立即关闭。 我用

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Toast.makeText(this, "This is my Toast message!",
            Toast.LENGTH_LONG).show();
    finish();
}

我需要更改什么?

这绝对是一个非常奇怪的应用程序。

尽管您可以从任何可以访问 Context 的地方启动 Toast,但您肯定需要使用 Activity,因为需要在主屏幕。

但是,默认情况下,即使未创建布局或 'set',Activity 的 window 仍会显示。这是典型的行为,因为该行为有它自己的元素,并且只是在此默认值 Activity window 内添加了一个布局。

但这并不意味着你不能做你想做的事。

您只需让 Activity window 不显示即可。这通常是通过样式来完成的。

为此,您可以使用这个主题:

android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen"

只需将该主题添加到 Activity 中的 'Manifest.xml'

如果您不想使用全屏无标题栏版本,可以尝试其他半透明主题。

你说你不想使用半透明 Activity,但这似乎是最好的方法:

  1. 在您的清单中,将 Activity 主题设置为 Theme.Translucent.NoTitleBar

    <application
        android:theme="@android:style/Theme.Translucent.NoTitleBar"
        ...
        ...>
    
  2. 不要为您的 Activity 布局而烦恼,也不要调用 setContentView()

  3. 在你的 Activity 的 onCreate() 中,现在显示你的 Toast
  4. finish()退出Activity。

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //setContentView(R.layout.activity_main);
        Toast.makeText(this, "Hello", Toast.LENGTH_SHORT).show();
        finish();
    }
    

换句话说,您的 Activity 不必是可见的; 将只显示 Toast。

                LayoutInflater inflater = getLayoutInflater();
            View layout = inflater.inflate(R.layout.custom_toast_layout, (ViewGroup) findViewById(R.id.custom_toast_layout));
            TextView text = layout.findViewById(R.id.tv_custom_toast);
            text.setText("You have not marked any favourites");
            Toast toast = new Toast(this);
            toast.setGravity(Gravity.BOTTOM, 0, 50);
            toast.setDuration(Toast.LENGTH_SHORT);
            toast.setView(layout);
            toast.show();

创建自定义 toast.. 这里 Custom_toast_layout textview 背景应该是透明的..