适应6.0,全局Dialog终极解决方案 Application.ActivityLifecycleCallbacks
来源:互联网 发布:easyrecovery for mac 编辑:程序博客网 时间:2024/06/05 10:43
6.0推出之后,部分手机完全限制了全局Toast弹出类型。so 撸主
(http://blog.csdn.net/a940659387/article/details/50152561)
这个文章也该光荣退休了。
but 想要看这篇文章的童鞋应该先看撸主的前一篇文章,why? because 你不看辣个就看不懂这个。
Application.ActivityLifecycleCallbacks
顾明思议,肯定是用在Application中的 。 关于不知道怎么配置Application的童鞋可自行谷歌。
再瞅,带着callback must 是一个接口。 没错 就是一个接口 一个在application中实现用来监听activity
生命周期触发步骤的东东。
没图说个蛋蛋 先上图片
方法
@Override public void onActivityCreated(Activity activity, Bundle savedInstanceState) { if(activity.getParent()!=null){ NewContext = activity.getParent(); }else NewContext = activity; } @Override public void onActivityStarted(Activity activity) { if(activity.getParent()!=null){ NewContext = activity.getParent(); }else NewContext = activity; } @Override public void onActivityResumed(Activity activity) { if(activity.getParent()!=null){ NewContext = activity.getParent(); }else NewContext = activity; } @Override public void onActivityPaused(Activity activity) { ToastUtils.getInstanse().cancel(); } @Override public void onActivityStopped(Activity activity) { } @Override public void onActivitySaveInstanceState(Activity activity, Bundle outState) { } @Override public void onActivityDestroyed(Activity activity) { }
这个NewContext 就是我们的主要东东 记录当前用户停留在哪一个页面 。简单来说就是记录dialog弹出时
应该依赖那个activity.
soso 为了适配新方法 我们在全局的service中也做了一些小小的改动哦 。不懂怎么写一个全局弹出
dialog的service的童鞋请看这个文章;
[http://blog.csdn.net/a940659387/article/details/50152561]
本撸主还是粘出代码供your 一览吧。
public class CommonDialogService extends Service implements CommonDialogListener{ @Override public IBinder onBind(Intent intent) { return null; } /**this is TV*/ private static TextView tv; private static Dialog dialog; /**判断是否已经new Dialog*/ private void showDialog(int iscancle){ if(dialog==null){ dialog = new Dialog(CommonApplication.NewContext, R.style.MyDialogStyle); View view = LayoutInflater.from(this).inflate(R.layout.progressbar_item, null); dialog.setContentView(view); tv = (TextView) view.findViewById(R.id.mylaodint_text_id); ImageView progressImageView = (ImageView) view .findViewById(R.id.myloading_image_id); AnimationDrawable animationDrawable = (AnimationDrawable) progressImageView .getDrawable(); animationDrawable.start();// WindowManager.LayoutParams windows = dialog.getWindow().getAttributes();// windows.type=WindowManager.LayoutParams.TYPE_TOAST;// dialog.getWindow().setAttributes(windows);// dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_TOAST); if(iscancle==1){ dialog.setCanceledOnTouchOutside(true); }else{ dialog.setCanceledOnTouchOutside(false); } dialog.setOnKeyListener(new DialogInterface.OnKeyListener() { @Override public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) { dialog.dismiss(); dialog=null; return false; } }); dialog.setOnDismissListener(new DialogInterface.OnDismissListener() { @Override public void onDismiss(DialogInterface dialog) { dialog =null; } }); } if(dialog!=null&&!dialog.isShowing()){ dialog.show(); WindowManager.LayoutParams lp = dialog.getWindow() .getAttributes(); lp.width = ConstantsYiBaiSong.WinWidth/ 3; lp.height = LayoutParams.WRAP_CONTENT; dialog.getWindow().setAttributes(lp); } } public void onCreate() { /**this将此service与工具类绑定*/ ToastUtils.getInstanse().setListener(this); } /**showDialog*/ @Override public void show() { showDialog(1); dialog.setCancelable(true); tv.setText("请稍后..."); } /**cancleDialog*/ @Override public void cancle() { if(null!=dialog){ dialog.dismiss(); dialog = null; } } /**show have custom Text dialog*/ @Override public void showstr(String str) { showDialog(1); dialog.setCancelable(true); tv.setText(str); } /**show uncancle's dialog */ @Override public void showunCancle() { showDialog(2); dialog.setCanceledOnTouchOutside(false); dialog.setCancelable(false); tv.setText("请稍后..."); } @Override public void setStr(String str) { if(dialog==null){ return; } if(dialog.isShowing()){// Log.e("TAG", "str====:" + str); tv.setText(str+""); } } @Override public void showDismissListener(final ToastUtils.DisMisCallBack callBack) { if(CommonApplication.NewContext!=null&&dialog==null){ dialog = new Dialog(CommonApplication.NewContext, R.style.MyDialogStyle); View view = LayoutInflater.from(this).inflate(R.layout.progressbar_item, null); dialog.setContentView(view); tv = (TextView) view.findViewById(R.id.mylaodint_text_id); ImageView progressImageView = (ImageView) view .findViewById(R.id.myloading_image_id); AnimationDrawable animationDrawable = (AnimationDrawable) progressImageView .getDrawable(); animationDrawable.start(); dialog.setOnDismissListener(new DialogInterface.OnDismissListener() { @Override public void onDismiss(DialogInterface dialog) { callBack.disMisCallBack(); }});// WindowManager.LayoutParams windows = dialog.getWindow().getAttributes();// windows.type=WindowManager.LayoutParams.TYPE_TOAST;// dialog.getWindow().setAttributes(windows);// dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_TOAST);// if(iscancle==1){// dialog.setCanceledOnTouchOutside(true);// }else{// dialog.setCanceledOnTouchOutside(false);// } } dialog.setCanceledOnTouchOutside(false); if(dialog!=null&&!dialog.isShowing()){ dialog.show(); WindowManager.LayoutParams lp = dialog.getWindow() .getAttributes(); lp.width = ConstantsYiBaiSong.WinWidth/ 3; lp.height = LayoutParams.WRAP_CONTENT; dialog.getWindow().setAttributes(lp); } } ; @Override public void onDestroy() { super.onDestroy(); if(null!=dialog &&dialog.isShowing()){ dialog.cancel(); } }}
细心的童鞋可能已经发现 有些代码已经被注释了 。 因为么 不注释 6.0就会啪啪啪一直蹦。 you know .
话到这里 撸主已经没有太多的话想说了。so女生压底图一张,然后上demo;
git地址:全局Dialog适配6.0
1 1
- 适应6.0,全局Dialog终极解决方案 Application.ActivityLifecycleCallbacks
- Application.ActivityLifecycleCallbacks的使用方法
- Android Activity 全局管理 终极解决方案
- 关于要使用全局dialog的解决方案
- SpringMVC全局文件上传类型限制【终极解决方案】
- Application中ActivityLifecycleCallbacks的原理分析
- 全局dialog
- 全局dialog
- ActivityLifecycleCallbacks
- ActivityLifecycleCallbacks
- ActivityLifecycleCallbacks
- ActivityLifecycleCallbacks
- dialog 大小自动适应
- Activity生命周期监测接口-Application的ActivityLifecycleCallbacks接口
- Android 集中处理Activity的生命周期事件: Application.ActivityLifecycleCallbacks
- Application中的管理所有activity的利器:ActivityLifecycleCallbacks
- 子窗口关闭artdialog终极解决方案:window.parent.window.art.dialog({ id: 'qin123' }).close();
- android 全局Dialog
- MVC 4.0 Razor模板引擎 @Html.RenderPartial 与 @Html.RenderAction 区别
- Socket编程
- Strategy_Level3
- 值得一记的开发css小技巧
- Android Multimedia框架总结(六)C++中MediaPlayer的C/S架构
- 适应6.0,全局Dialog终极解决方案 Application.ActivityLifecycleCallbacks
- 从零学React Native之13 持久化存储
- iOS App常用的宏
- window路由表
- 数据库逆向框架代码生成工具:MyBatis Generator的使用
- Unreal Cook Book:创建对象
- iOS开发之OCR光学识别储蓄卡以及信用卡
- c# sealed 使用方法
- WebSocket协议