{"id":27202225,"url":"https://github.com/o0o0oo00/fancydialog","last_synced_at":"2025-04-09T21:59:02.947Z","repository":{"id":217129805,"uuid":"163812910","full_name":"o0o0oo00/FancyDialog","owner":"o0o0oo00","description":"Kotlin + DSL风格代替传统的Builder模式 诸多可配置项  高阶函数代替自定义回调接口 书写起来超级顺手","archived":false,"fork":false,"pushed_at":"2019-06-16T04:15:09.000Z","size":426,"stargazers_count":24,"open_issues_count":1,"forks_count":1,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-04-09T21:58:46.656Z","etag":null,"topics":["android","android-dialog","android-kotlin","basedialog","dialog","dsl","dsl-builder","dsl-dialog","dsl-style","lambda"],"latest_commit_sha":null,"homepage":"","language":"Kotlin","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/o0o0oo00.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2019-01-02T08:12:31.000Z","updated_at":"2024-03-30T05:35:04.000Z","dependencies_parsed_at":"2024-01-14T19:21:05.027Z","dependency_job_id":"2fac7c86-835b-41b4-837d-5fdef2cff86f","html_url":"https://github.com/o0o0oo00/FancyDialog","commit_stats":null,"previous_names":["o0o0oo00/fancydialog"],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/o0o0oo00%2FFancyDialog","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/o0o0oo00%2FFancyDialog/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/o0o0oo00%2FFancyDialog/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/o0o0oo00%2FFancyDialog/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/o0o0oo00","download_url":"https://codeload.github.com/o0o0oo00/FancyDialog/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248119329,"owners_count":21050754,"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":["android","android-dialog","android-kotlin","basedialog","dialog","dsl","dsl-builder","dsl-dialog","dsl-style","lambda"],"created_at":"2025-04-09T21:59:02.276Z","updated_at":"2025-04-09T21:59:02.940Z","avatar_url":"https://github.com/o0o0oo00.png","language":"Kotlin","funding_links":[],"categories":[],"sub_categories":[],"readme":"# FancyDialog\n\n[![](https://jitpack.io/v/o0o0oo00/FancyDialog.svg)](https://jitpack.io/#o0o0oo00/FancyDialog)\n\n## Usage\n```\nallprojects {\n    repositories {\n    ...\n     maven { url 'https://jitpack.io' }\n```\n```\n implementation 'com.github.o0o0oo00:FancyDialog:version'\n```\n\n## DSL风格代替Builder模式\n\ndomain specific language / DSL  **一组特定的语言结构**  \n\nDSL风格或者也可以说是**函数式风格**  \n\nJava使用Builder来构建复杂对象。  \n\n而Kotlin中配合**lambad** 使用DSL风格 将使复杂对象的构建更加可读，更清晰，更简洁\n\n书写起来**舒服顺手**\n\n**`FancyDialog`** 拥有诸多的配置选项、基本上涵盖了日常开发使用的方方面面\n\n配置项为更简洁的代码、用多少写多少、不用不写，岂不美哉~\n\n安排！\n\n首先我们要明白`lambda`的几个特性\n\n* 如果`lambda`是函数的最后一个参数，可以放在**括号外面**\n* 如果`lambda`是函数的唯一参数，它可以放在**括号外面**并且**省略括号**\n* 指定接收者的`lambda`\n* 高阶函数代替传统的自定义回调接口\n\n通过**`apply(block)`** 来配置dialog所需要的参数。而不需要通过不断的**`.setXXX`**来设置\n\n\u003eTips :   \n使用高阶函数会带来一些运行时的效率损失：每一个函数都是一个对象，并且会捕获一个闭包。 即那些在函数体内会访问到的变量。 内存分配（对于函数对象和类）和虚拟调用会引入运行时间开销。  \n进而使用 **`inline`** 修饰函数\n\n\n使用姿势\n\n关键属性解析\n\n* `mWidth` / `mHeight` 宽度和高度\n* `mGravity` 居中/居*\n* `mOffsetX` / `mOffsetY` 位置偏移量\n* `touchOutside` 触摸外部消失\n* `lowerBackground` 降级dialog背景，配合[newToast](https://github.com/o0o0oo00/NewToast)可实现 Alert警告框不会被Dialog阴影覆盖掉\n\n下面提供几种常见的dialog使用形式\n\n**如果需要其他使用类型，请自行继承Base，相信我，它超级简单的 ！** (*￣3￣)╭ \n\n### askDialog\n#### normal\n```\naskDialog(supportFragmentManager) {\n    mTitle = \"标题\"\n    sureClick {\n        Toast.makeText(this@MainActivity, \"sure\", Toast.LENGTH_SHORT).show()\n    }\n    cancelClick {\n        Toast.makeText(this@MainActivity, \"cancel\", Toast.LENGTH_SHORT).show()\n    }\n}\n```\n\u003cimg src=\"https://raw.githubusercontent.com/o0o0oo00/FancyDialog/master/mdimage/S90102-163051.jpg\" width=\"20%\" height=\"20%\"\u003e\n\n#### onlySure\n```\naskDialog(supportFragmentManager) {\n    mTitle = \"标题\"\n    mMessage = \"摘要vv摘要摘要摘要摘要摘要\"\n    mGravity = Gravity.TOP\n    onlySure = true\n    sureClick {\n        Toast.makeText(this@MainActivity, \"sure\", Toast.LENGTH_SHORT).show()\n    }\n}\n```\n\n\u003cimg src=\"https://raw.githubusercontent.com/o0o0oo00/FancyDialog/master/mdimage/S90102-163103.jpg\" width=\"20%\" height=\"20%\"\u003e\n\n### askMoreDialog\n```\naskMoreDialog(supportFragmentManager) {\n    mTitle = \"标题\"\n    mMessage = \"摘要vv摘要摘要摘要摘要摘要摘要vv摘要摘要摘要摘要摘要\"\n    mColor = Color.RED\n    sureClick(key = \"第一个\") {\n        Toast.makeText(this@MainActivity, \"第一个\", Toast.LENGTH_SHORT).show()\n    }\n    cancelClick(key = \"第二个\") {\n        Toast.makeText(this@MainActivity, \"第二个\", Toast.LENGTH_SHORT).show()\n    }\n    button3Clicks(key = \"第三个\", color = Color.GRAY) {\n        Toast.makeText(this@MainActivity, \"第三个\", Toast.LENGTH_SHORT).show()\n    }\n}\n```\n\u003cimg src=\"https://raw.githubusercontent.com/o0o0oo00/FancyDialog/master/mdimage/S90102-163121.jpg\" width=\"20%\" height=\"20%\"\u003e\n\n### editDialog\n```\neditDialog(supportFragmentManager) {\n    rightClick {\n        Toast.makeText(this@MainActivity, it, Toast.LENGTH_SHORT).show()\n    }\n}\n```\n\u003cimg src=\"https://raw.githubusercontent.com/o0o0oo00/FancyDialog/master/mdimage/S90102-163127.jpg\" width=\"20%\" height=\"20%\"\u003e\n\n### listDialog\n```\nfun list(view: View) {\n\tlateinit var dialog: ListDialog\n\tval click: (View, Int) -\u003e Unit = { v, position -\u003e\n\t    dialog.dismiss()\n\t    Toast.makeText(this@MainActivity, (v.tag as String), Toast.LENGTH_SHORT).show()\n\t}\n\tval longClick: (View, Int) -\u003e Unit = { v, position -\u003e\n\t//            dialog.dismiss()\n\t    Toast.makeText(this@MainActivity, \"longClick\" + (v.tag as String), Toast.LENGTH_SHORT).show()\n\t}\n\tdialog = listDialog {\n\t    listSetting(click, longClick) {\n\t        add(\"第一头条\")\n\t        add(\"第二头条\")\n\t        add(\"_(:з」∠)_\")\n\t    }\n\t}\n\tdialog.show(supportFragmentManager, \"dialog\")\n}\n```\n\u003cimg src=\"https://raw.githubusercontent.com/o0o0oo00/FancyDialog/master/mdimage/S90108-153438.jpg\" width=\"20%\" height=\"20%\"\u003e\n### customDialog\n待续...\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fo0o0oo00%2Ffancydialog","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fo0o0oo00%2Ffancydialog","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fo0o0oo00%2Ffancydialog/lists"}