显示没有 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,但这似乎是最好的方法:
在您的清单中,将 Activity 主题设置为 Theme.Translucent.NoTitleBar
。
<application
android:theme="@android:style/Theme.Translucent.NoTitleBar"
...
...>
不要为您的 Activity 布局而烦恼,也不要调用 setContentView()
。
- 在你的 Activity 的
onCreate()
中,现在显示你的 Toast。
用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 背景应该是透明的..
我的应用程序不寻常:当它启动时,它只显示一条 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,但这似乎是最好的方法:
在您的清单中,将 Activity 主题设置为
Theme.Translucent.NoTitleBar
。<application android:theme="@android:style/Theme.Translucent.NoTitleBar" ... ...>
不要为您的 Activity 布局而烦恼,也不要调用
setContentView()
。- 在你的 Activity 的
onCreate()
中,现在显示你的 Toast。 用
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 背景应该是透明的..