【问题标题】:Displaying a toast without window显示没有窗口的吐司
【发布时间】:2019-07-02 12:04:07
【问题描述】:

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

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

我需要改变什么?

【问题讨论】:

  • 应用程序没有活动 - 有可能吗?我需要在意图过滤器 的清单中写什么?

标签: android android-activity toast


【解决方案1】:

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

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

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

  3. 现在在您的 Activity 的 onCreate()展示您的 Toast
  4. 使用finish() 退出活动。

    @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。

【讨论】:

    【解决方案2】:

    这绝对是一个很奇怪的应用。

    虽然您可以从可以访问Context 的任何地方启动Toast,但由于需要在主屏幕上提供启动器图标,您肯定需要使用Activity

    但是,默认情况下,即使没有创建或“设置”布局,Activity 的窗口仍然会显示。这是典型的行为,因为行为有它自己的元素,并且在这个默认的活动窗口内简单地添加了一个布局。

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

    您只需要使该活动窗口不显示即可。这通常通过样式来完成。

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

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

    只需将该主题添加到“Manifest.xml”内的活动中

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

    【讨论】:

      【解决方案3】:
                      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 背景应该是透明的..

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-06-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多