如何创建类似于WhatsApp Android版使用的弹出通知?

11

4
问题有点宽泛,请附上该通知的屏幕截图以及您尝试完成它的任何代码。 - Athul Harikumar
2
你可以使用普通的Activity,并将其主题样式设置为Theme.Dialog。 - Carnal
1
你可以通过将布局充气到对话框或创建一个看起来像对话框的活动来实现此目标,这两种方法都可以参考Android API演示(在2.2版本中)或参考http://stackoverflow.com/questions/12070005/dialog-with-own-layout-in-android/12070177#12070177。 - Athul Harikumar
1
但是如果您查看它,那么当应用程序在后台运行时,它的弹出窗口应该出现。这就像从服务器端发送的任何消息。 - Hari Nadar
Hari Nadar想要像这样的东西http://stackoverflow.com/questions/21140721/how-does-whatsapp-pop-up-notification-work我也想要 :( - Fabio Crivelaro
显示剩余2条评论
4个回答

6
他们被称为“悬浮通知”。这个页面有一个很好的解释。
总结一下,将优先级设置为高(或最高)。
以下是我的代码示例:
public static void notify(Context context, int id, int titleResId,
                          int textResId, PendingIntent intent) {
    NotificationManager notificationManager =
        (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
    String title = context.getString(titleResId);
    String text = context.getString(textResId);

    NotificationCompat.Builder builder = new NotificationCompat.Builder(context)
            .setSmallIcon(R.drawable.notification)
            .setContentTitle(title)
            .setContentText(text)
            .setDefaults(Notification.DEFAULT_ALL)
            .setPriority(NotificationCompat.PRIORITY_HIGH)
            .setAutoCancel(true)
            .setWhen(System.currentTimeMillis())
            .setTicker(title)
            .setContentIntent(intent);
    notificationManager.notify(id, builder.build());
}

链接不可用。 - PRATEEK BHARDWAJ

0

您可以使用对话框主题或通过在主题中将窗口背景设置为透明来使活动窗口透明。只需确保您的用户界面看起来像一个对话框即可。

<style name="Theme.AppCompat.Translucent" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:colorBackgroundCacheHint">@null</item>
    <item name="android:windowIsTranslucent">true</item>
    <item name="android:windowAnimationStyle">@android:style/Animation</item>
</style>

0

声明一个PopUpWindow引用,并从想要打开弹出窗口的地方调用initiatePopupWindow()方法:

private PopupWindow pwindo;

private void initiatePopupWindow() {
try {
// We need to get the instance of the LayoutInflater
LayoutInflater inflater = (LayoutInflater) PopUpWinndowDemoActivity.this
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View layout = inflater.inflate(R.layout.screen_popup,
(ViewGroup) findViewById(R.id.popup_element));
pwindo = new PopupWindow(layout, 300, 370, true);
pwindo.showAtLocation(layout, Gravity.CENTER, 0, 0);

} catch (Exception e) {
e.printStackTrace();
}
}

有一个名为screen_popup.xml的弹出窗口,如下所示:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/popup_element"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#444444"
android:orientation="vertical"
android:padding="10sp" >

<TextView
android:id="@+id/txtView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="5sp"
android:text="Hello!" />

</LinearLayout>

当我切换活动时,弹出窗口管理器不会显示,但如果我希望它仍然可见于我启动或按下返回键的任何活动,则有任何方法吗? - Vishal Patoliya ツ

-7

我不知道 WhatsApp 的弹出窗口长什么样子...

你可以使用 toastdialog


我在我的问题中提供了图片链接,请查看。 - Hari Nadar
对话框是否无法处理您想要执行的操作? - gh.
这将是一个自定义对话框,但我希望即使应用程序未运行也能发送通知。 我想创建一个服务或类似的东西来显示这些通知。 - Hari Nadar
你不能从服务中弹出对话框,因为你不应该这样做。如果一个应用程序在我使用另一个应用程序时弹出对话框,我会将该应用程序从我的设备中删除。请参阅通知 - gh.
我同意,像新短信或闹钟一样,非常烦人。 - miky
3
我不知道WhatsApp的弹出窗口是什么样子……那么你就不应该回答这个问题。 - Roman Holzner

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接