Android弹出窗口与Android对话框

时间:2016-08-03 06:16:51

标签: android alertdialog popupwindow

我正在尝试在我的应用程序中实现一个简单的逻辑,其中向用户显示一个弹出窗口(在应用程序启动的某个时间之后)。弹出窗口只显示带有一些信息消息的TextView。每次启动应用程序并显示新消息时,都会刷新此消息。 弹出窗口的UI与我的应用程序UI匹配 - 这里可能只需弹出背景图像。此外,弹出窗口的右上角还会显示一个关闭按钮(X) - 关闭此弹出窗口。

显示消息的逻辑:我有一个String数组,其中存储了大约100个字符串。我从这个数组中随机选择一个字符串并填充显示该消息的弹出窗口TextView。请建议是否有比我在这里做的更好的方法。还有可能逻辑,如果选择了一条消息,那么在其他消息至少显示一次之前,不会选择相同的消息吗?

显示弹出窗口的逻辑:这是我无法实现的。我不想在任何用户EventButton点击时锚定弹出窗口。我只想在一段时间后显示消息 - 比如说

  

的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)

参数。

我遇到的问题是:

  1. 首先,我不确定这是否是显示自定义UI弹出窗口的正确方法。我知道AlertDialog但不确定在这种情况下哪个是最好的选择 - 请建议。

  2. 为什么CoordinatorLayout显示空指针?

  3. 如何在此弹出窗口中实现右上角(X)按钮逻辑?

2 个答案:

答案 0 :(得分:4)

1。是的,有很多选项可以在Android中显示自定义UI弹出窗口。您可以从PopupWindowAlertDialog或对话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)

  1. 带主题对话框的活动。
    这不是一个好主意。它看起来像一个弹出窗口,但您无法在弹出窗口外单击以关闭它。

  2. PopupWindow
    它将停止应用程序。当用户完成单击弹出窗口后,应用程序可以再次运行。

  3. AlertDialog
    最好的一个,它不会停止应用程序,可以通过在对话框外单击来关闭。