{"id":13642263,"url":"https://github.com/hss01248/DialogUtil","last_synced_at":"2025-04-20T16:31:19.901Z","repository":{"id":64484301,"uuid":"68993882","full_name":"hss01248/DialogUtil","owner":"hss01248","description":"common used dialog with material style ( in support v7)，ios style，get top activity automatically, invoke everywhere (any thread , any window)","archived":false,"fork":false,"pushed_at":"2023-02-10T02:14:03.000Z","size":7803,"stargazers_count":980,"open_issues_count":24,"forks_count":172,"subscribers_count":33,"default_branch":"master","last_synced_at":"2024-02-29T00:39:00.117Z","etag":null,"topics":["alertdialog","dialog","ios-alert","loading","material-dialogs","progress-dialog","util","utils"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/hss01248.png","metadata":{"files":{"readme":"README-ch.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2016-09-23T06:01:21.000Z","updated_at":"2024-02-27T03:22:47.000Z","dependencies_parsed_at":"2023-02-09T11:31:13.211Z","dependency_job_id":"28110adc-b4e8-4ade-af9d-924fcbaa33f4","html_url":"https://github.com/hss01248/DialogUtil","commit_stats":null,"previous_names":[],"tags_count":36,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hss01248%2FDialogUtil","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hss01248%2FDialogUtil/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hss01248%2FDialogUtil/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hss01248%2FDialogUtil/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/hss01248","download_url":"https://codeload.github.com/hss01248/DialogUtil/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":223832903,"owners_count":17210742,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["alertdialog","dialog","ios-alert","loading","material-dialogs","progress-dialog","util","utils"],"created_at":"2024-08-02T01:01:29.137Z","updated_at":"2025-04-20T16:31:19.893Z","avatar_url":"https://github.com/hss01248.png","language":"Java","readme":"\n\n\n# DialogUtil\nmaterial风格(v7支持包中的)，ios风格，自动获取顶层activity,可在任意界面弹出,可在任意线程弹出\n\n[![](https://jitpack.io/v/hss01248/DialogUtil.svg)](https://jitpack.io/#hss01248/DialogUtil)\n\n[wiki](https://github.com/hss01248/DialogUtil/wiki)\n\n# 注意点\n\n* 在activity已经resume后再调用,不要在onstart里用,否则可能会不显示. 见[关于dialog,PopupWindow,SoftInputBoard的弹出时机的问题](http://www.jianshu.com/p/bd98cee2854b)\n* 如果非要在onstart里,就记得调用setActivity()\n* 如果有的国产机不显示,就调用setActivity()\n* 不要滥用loadingdialog:\n\n\n\n\u003e 注意使用的场景:\n\n```\n 第一此进入页面,用layout内部的loadingview,有很多statelayout框架,也可以用我的这个:\n  https://github.com/hss01248/PageStateManager\n  再次刷新,用刷新头显示刷新状态\n  局部刷新或点击某按钮访问网络,用loading dialog,不影响页面本身状态,类似web中的ajax请求.\n  \n```\n\n# 特性\n\n* **自动获取顶层activity,**无需传入activity也可弹出dialog.如果传入,则指定在此activity弹出.\n* 安全,**任意线程**均可调用.\n* 类型丰富,包括常用的ios风格dialog和material design风格的dialog,且按钮和文字样式可便捷地修改\n* **自定义view**:可以传入自定义的view,定义好事件,本工具负责安全地显示\n* 也可以保留iso样式或material 样式的底部按钮和上方title(可隐藏),中间的view可以完全自定义\n* 考虑了显示内容超多时的滑动和与屏幕的间隙.\n* 也可以设置宽高百分比来**自定义宽高**\n* 可以关闭默认的阴影背景,从而能使用xml中**自定义的背景**(弹出自定义view的dialog时常用)\n* 支持国际化\n* **智能弹出和隐藏软键盘**.自定义view的dialog只要设置setNeedSoftKeyboard为true,即可自动处理软键盘的弹出和隐藏\n* ios样式和material 样式的均**可以在三种状态下显示**: 普通dialog,TYPE_TOAST,作为activity.(原生ProgressDialog和Design包下的BottomSheetDialog除外,其在TYPE_TOAST或activity显示有异样)\n* 支持带x的**广告样式**的动画\n\n\n# todo\n\n\nmd 单选多选颜色自定义\nprogressdialog改成完全自定义的\n所有dialog : 增加动画的自定义\n\n选择https://github.com/liangchengcheng/android-loading-dialog中的一些好的效果加进来\n\n\n\n# 示例图\n\n\nhttps://github.com/hss01248/DialogUtil/wiki/0_types(%E6%89%80%E6%9C%89%E7%9A%84%E7%B1%BB%E5%9E%8B)\n\n# 适配情况\n\nhttps://github.com/hss01248/DialogUtil/wiki/screen-adapt(%E5%B1%8F%E5%B9%95%E9%80%82%E9%85%8D)\n\n\n\n\n# useage\n\n\n\n## gradle\n\n**Step 1.** Add the JitPack repository to your build file\n\nAdd it in your root build.gradle at the end of repositories:\n\n```\n\tallprojects {\n\t\trepositories {\n\t\t\t...\n\t\t\tmaven { url \"https://jitpack.io\" }\n\t\t}\n\t}\n```\n\n**Step 2.** Add the dependency\n\n```\n\tdependencies {\n\t        compile ('com.github.hss01248:DialogUtil:lastest release'){\n              exclude group: 'com.android.support'\n\t        }\n\t         compile 'com.android.support:appcompat-v7:26.1.0'\n   \t\t\t compile 'com.android.support:recyclerview-v7:26.1.0'\n    \t\t compile 'com.android.support:design:26.1.0'\n    \t\t //将26.1.0: 改为自己项目中一致的版本\n\t}\n```\nlastest release: https://github.com/hss01248/DialogUtil/releases\n\n## 初始化\n\n```\n//在Application的oncreate方法里:\n传入context\nStyledDialog.init(this);\n\n在activity生命周期callback中拿到顶层activity引用:\n registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {\n            @Override\n            public void onActivityCreated(Activity activity, Bundle savedInstanceState) {\n                ActivityStackManager.getInstance().addActivity(activity);\n            }\n\n            @Override\n            public void onActivityStarted(Activity activity) {\n\n            }\n\n            @Override\n            public void onActivityResumed(Activity activity) {\n            }\n\n            @Override\n            public void onActivityPaused(Activity activity) {\n\n            }\n\n            @Override\n            public void onActivityStopped(Activity activity) {\n\n            }\n\n            @Override\n            public void onActivitySaveInstanceState(Activity activity, Bundle outState) {\n\n            }\n\n            @Override\n            public void onActivityDestroyed(Activity activity) {\n                ActivityStackManager.getInstance().removeActivity(activity);\n            }\n        });\n\n```\n\n## 示例代码(MainActivity里)\n\n```\n        //使用默认样式时,无须.setxxx:\n        StyledDialog.buildLoading().show();\n        \n        //自定义部分样式时:\n        StyledDialog.buildMdAlert(\"title\", msg,  new MyDialogListener() {\n                    @Override\n                    public void onFirst() {\n                        showToast(\"onFirst\");\n                    }\n\n                    @Override\n                    public void onSecond() {\n                        showToast(\"onSecond\");\n                    }\n\n                    @Override\n                    public void onThird() {\n                        showToast(\"onThird\");\n                    }\n\n\n                })\n                        .setBtnSize(20)\n                        .setBtnText(\"i\",\"b\",\"3\")\n                        .show();\n```\n\n# 相关回调\n\n## MyDialogListener\n\n```\n\tpublic abstract void onFirst();//md-确定,ios-第一个\n    public abstract void onSecond();//md-取消,ios-第二个\n    public void onThird(){}//md-netural,ios-第三个\n\n    public void onCancle(){}\n\n    /**\n     * 提供给Input的回调\n     * @param input1\n     * @param input2\n     */\n    public void onGetInput(CharSequence input1,CharSequence input2){\n\n    }\n\n    /**\n     * 提供给MdSingleChoose的回调\n     * @param chosen\n     * @param chosenTxt\n     */\n    public void onGetChoose(int chosen,CharSequence chosenTxt){\n\n    }\n\n    /**\n     * 提供给MdMultiChoose的回调\n     * @param states\n     */\n    public void onChoosen( List\u003cInteger\u003e selectedIndex, List\u003cCharSequence\u003e selectedStrs,boolean[] states){\n\n    }\n```\n\n## MyItemDialogListener\n\n```\n /**\n     * IosSingleChoose,BottomItemDialog的点击条目回调\n     * @param text\n     * @param position\n     */\n   public abstract void onItemClick(CharSequence text, int position);\n\n\n    /**\n     * BottomItemDialog的底部按钮(经常是取消)的点击回调\n     */\n   public void onBottomBtnClick(){}\n```\n\n\n\n\n\n# 提供的api\n\n### 各类dialog的初始参数传递和回调:StyledDialog.buildxxx:\n\n ![methodsofstyledialog](img0/methodsofstyledialog.jpg)\n\n\n\n## 自定义样式:setXxx\n\n\n\n![methodsofconfig](img0/methodsofconfig.jpg)\n\n \n\n## 最后必须调用show(),返回dialog对象\n\n\n\n\n\n# 对话框的消失\n\n```\nStyledDialog.dismiss(DialogInterface... dialogs);\n```\n\n\n\n## 两个loading对话框不需要对象就可以直接dismisss:\n\n```\nStyledDialog.dismissLoading();\n```\n\n### progress dialog 的进度更新\n\n```\n/**\n *  可以在任何线程调用\n * @param dialog 传入show方法返回的对象\n * @param progress\n * @param max\n * @param msg 如果是转圈圈,会将msg变成msg:78%的形式.如果是水平,msg不起作用\n * @param isHorizontal 是水平线状,还是转圈圈\n */\npublic static void updateProgress( Dialog dialog, int progress,  int max,  CharSequence msg,  boolean isHorizontal)\n```\n\n","funding_links":[],"categories":["对话框"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhss01248%2FDialogUtil","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhss01248%2FDialogUtil","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhss01248%2FDialogUtil/lists"}