我正在尝试在我的应用程序中实现一个简单的逻辑,其中向用户显示一个弹出窗口(在应用程序启动的某个时间之后)。弹出窗口只显示带有一些信息消息的TextView
。每次启动应用程序并显示新消息时,都会刷新此消息。
弹出窗口的UI与我的应用程序UI匹配 - 这里可能只需弹出背景图像。此外,弹出窗口的右上角还会显示一个关闭按钮(X) - 关闭此弹出窗口。
显示消息的逻辑:我有一个String
数组,其中存储了大约100个字符串。我从这个数组中随机选择一个字符串并填充显示该消息的弹出窗口TextView
。请建议是否有比我在这里做的更好的方法。还有可能逻辑,如果选择了一条消息,那么在其他消息至少显示一次之前,不会选择相同的消息吗?
显示弹出窗口的逻辑:这是我无法实现的。我不想在任何用户Event
或Button
点击时锚定弹出窗口。我只想在一段时间后显示消息 - 比如说
的Thread.sleep(3000);
现在,我尝试使用以下代码使用PopupWindow
。
PopupWindow infoPopup;
LinearLayout infoLayout;
TextView infoTextView;
Button infoButton;
infoTextView = new TextView(this);
infoTextView.setText("Testing Popup Text");
infoTextView.setPadding(10,10,10,10);
infoButton = new Button(this);
infoButton.setText("Close");
infoLayout = new LinearLayout(this);
infoLayout.setOrientation(LinearLayout.VERTICAL);
infoLayout.addView(infoTextView);
infoLayout.addView(infoButton);
infoPopup = new PopupWindow(infoLayout,LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.WRAP_CONTENT);
infoPopup.setContentView(infoLayout);
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
infoPopup.showAtLocation((CoordinatorLayout)findViewById(R.id.main_content),Gravity.CENTER,100,100);
但是这个弹出窗口在最后一行显示错误,在我的
上给出了空指针(CoordinatorLayout)findViewById(R.id.main_content)
参数。
我遇到的问题是:
首先,我不确定这是否是显示自定义UI弹出窗口的正确方法。我知道AlertDialog
但不确定在这种情况下哪个是最好的选择 - 请建议。
为什么CoordinatorLayout
显示空指针?
如何在此弹出窗口中实现右上角(X)按钮逻辑?
答案 0 :(得分:4)
1。是的,有很多选项可以在Android中显示自定义UI弹出窗口。您可以从PopupWindow
,AlertDialog
或对话Activity
中选择一个。你需要决定哪个最适合你。
如果您需要自定义UI并且必须显示列表或某些复杂的GUI,我建议您使用Activity
启动theme.Dialog
。只需将Activity
的主题设置为此类android:theme="@android:style/Theme.Holo.Light.Dialog"
即可。有很多关于实现对话Activity
的教程。
PopupWindow
是另一种在屏幕中的任意位置自定义弹出窗口的工具。如果你总是在屏幕中间显示这个弹出窗口,那么我建议不要使用它。 AlertDialog
应该可以正常工作。
AlertDialog
有很多变种,就我可以假设你的问题而言,这个最适合你。您也可以在对话框的右上角有一个十字按钮(您可以在任何地方设置图标,因为您可以为AlertDialog
提供自定义布局)。我个人使用此library为我的AlertDialog
提供自定义布局。你也可以看看这个。
2。 NullPointerException
很简单。您的布局没有任何名为main_content
的ID。如果这不能解决您的问题,请发布您的logcat。也发布了布局。
3。正如我之前告诉过您的那样,我使用该库为AlertDialog
提供自定义布局,您也可以查看它。因此,在实现此库之后,您可以使用十字按钮轻松设计自己的布局,并轻松实现onClick
功能。
希望这有帮助。
答案 1 :(得分:0)
带主题对话框的活动。
这不是一个好主意。它看起来像一个弹出窗口,但您无法在弹出窗口外单击以关闭它。
PopupWindow
它将停止应用程序。当用户完成单击弹出窗口后,应用程序可以再次运行。
AlertDialog
最好的一个,它不会停止应用程序,可以通过在对话框外单击来关闭。