我通过使用windowmanager AddView在应用程序中自定义通知。
Android.view.WindowManager$BadTokenException:无法添加窗口--令牌Android.os.BinderProxy@74B2EFF无效;你的活动在进行吗?在Android.view.viewrootimpl.setView(viewrootimpl.java:685),在Android.view.windowmanagerlobal.addView(windowmanagerlobal.java:319),在Android.view.windowmanagerlobal.addView(windowmanagerlobal.java:85),在com.zuck3.petpol.manager.inboxNotificationmanager.showInboxNotificationmanager.java:82),在activityoncreate(instrumentation.java:1113)在Android.app.activitythread.performlaunchactivity(activitythread.java:2519)在Android.app.activitythread.handlelaunchactivity(activitythread.java:2654)在Android.app.activitythread.java:2654)在Android.app.activitythread.-Wrap11(activitythread.java:1488)在Android.os.handler.dispatchmessage(ythread.main(activitythread.java:5728)W/system.err:at java.lang.reflect.Method.invoke(本机方法)W/system.err:at com.android.internal.os.zygoteinit$methodandargscaller.run(zygoteinit.java:789)W/system.err:at com.android.internal.os.zygoteinit.main(zygoteinit.java:679)W/libegl:[ANDROID_RECORDABLE]格式:1
InboxNotificationManager.java
public class InboxNotificationManager {
private static InboxNotificationManager instance;
private WindowManager mWindowManager;
private WindowManager.LayoutParams mWindowParams;
private InboxNotificationView notificationView;
private Runnable runnable;
private Handler handler = new Handler(Looper.getMainLooper());
private Animation.AnimationListener animationListener = new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
}
@Override
public void onAnimationEnd(Animation animation) {
hideInboxNotification();
}
@Override
public void onAnimationRepeat(Animation animation) {
}
};
public static InboxNotificationManager Instance(Context context) {
if (instance == null) {
instance = new InboxNotificationManager(context);
}
return instance;
}
public InboxNotificationManager(Context context) {
notificationView = new InboxNotificationView(context);
mWindowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
mWindowParams = new WindowManager.LayoutParams();
mWindowParams.gravity = Gravity.TOP | Gravity.RIGHT;
mWindowParams.height = WindowManager.LayoutParams.WRAP_CONTENT;
mWindowParams.width = WindowManager.LayoutParams.MATCH_PARENT;
mWindowParams.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
| WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH;
mWindowParams.format = PixelFormat.TRANSLUCENT;
runnable = new Runnable() {
@Override
public void run() {
notificationView.stopAnimation(animationListener);
}
};
}
public void setTextMeesage(String meesage) {
notificationView.setTextMessage(meesage);
// Toast.makeText(InboxNotificationManager.this, "", Toast.LENGTH_SHORT).show();
}
public void showInboxNotification(String message) {
if (notificationView.getWindowToken() == null) {
mWindowManager.addView(notificationView, mWindowParams);
notificationView.startAnimation();
setTextMeesage(message);
} else {
// mWindowManager.setText(count);
}
notificationView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
notificationView.stopAnimation(animationListener);
}
});
handler.removeCallbacks(runnable);
handler.postDelayed(runnable, 3000);
}
public void hideInboxNotification() {
if (notificationView.getWindowToken() != null) {
mWindowManager.removeView(notificationView);
}
}
当我使用这个类时
InboxNotificationManager.Instance(BaseActivity.this).showInboxNotification("Hello world");
谢谢你,抱歉我的英语不好。
确保您的活动正在运行,请使用
if(mActivity != null && !mActivity.isFinishing())
检查
Examples // Opens a new dialog with the file.htm file and the size 320x240 // It also adds a custom parameter this can be retrieved by using tinyMCEPopup.getWindowArg inside the dialog. tinymce.active
本文向大家介绍Android自定义Toast之WindowManager,包括了Android自定义Toast之WindowManager的使用技巧和注意事项,需要的朋友参考一下 本文为大家分享了Android自定义Toast之WindowManager,供大家参考,具体内容如下 Toast:WindowManager 三个重要的API: public void addView(View view
主要内容:本节引言:,1.WindowManager的一些概念:,2.WindowManager使用实例:,3.文献扩展:,4.本节代码示例下载:,本节小结:本节引言: 本节给大家带来的Android给我们提供的系统服务中的——WindowManager(窗口管理服务), 它是显示View的最底层,Toast,Activity,Dialog的底层都用到了这个WindowManager, 他是全局的!该类的核心无非:调用addView,removeView,updateViewLayout这几个方
我正在向运行的activity添加一个带有WindowManager的相机覆盖。当我启动相机并调用WindowManager时,它将我的屏幕从纵向变为横向,即使我为WindowManager.LayoutParams分配了适当的纵向标记。还没能通过谷歌找到任何解决方案。 下面是我在服务中的方法中运行的WindowManager代码: 布局r.layout.camera只是我将相机添加到的Frame
问题内容: 有什么方法可以使用Animation在Android的项目中使用WindowManager扩展视图吗?即使使用网站中的示例,我也做不到!我使用了许多示例,但没有一个有效! 问题答案: 我不确定您的任务的确切要求,但是有两种方法可以向窗口提供动画: 用法如下: 添加附加的“容器”视图,因为它不是真实的,因此添加视图的普通动画无法使用。已经问过这个问题,但是缺少代码。我将通过以下方式应用它
本文向大家介绍Android使用WindowManager构造悬浮view,包括了Android使用WindowManager构造悬浮view的使用技巧和注意事项,需要的朋友参考一下 一般在android显示一个View都是通过Activity的setContentView设置的,但是还有一种方法,可以直接使用WindowManager在整个应用的最上层绘制我们需要显示的view,总体的效果类似于