{"id":14985986,"url":"https://github.com/rayliverified/customalertviewdialogue","last_synced_at":"2025-07-17T17:40:59.285Z","repository":{"id":67048091,"uuid":"87661117","full_name":"rayliverified/CustomAlertViewDialogue","owner":"rayliverified","description":"Custom AlertView Dialogue is the world's most advanced alert view library. Custom AlertView Dialogue includes simple message popups, confirmation alerts, selector popups, action sheet bottom menus, and input/feedback contact forms.","archived":false,"fork":false,"pushed_at":"2020-07-04T17:24:25.000Z","size":17993,"stargazers_count":119,"open_issues_count":8,"forks_count":25,"subscribers_count":5,"default_branch":"master","last_synced_at":"2025-04-10T04:49:05.407Z","etag":null,"topics":["action","alert","alertview","android","bottom","box","confirmation","contact","dialog","feedback","form","input","menu","message","modal","options","popup","select","selector","sheet"],"latest_commit_sha":null,"homepage":"http://rayliverified.com","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"0bsd","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/rayliverified.png","metadata":{"files":{"readme":"README.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,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-04-08T20:08:38.000Z","updated_at":"2025-03-08T04:48:44.000Z","dependencies_parsed_at":null,"dependency_job_id":"49a30ddf-e08a-4c07-ab21-1fc54931e14c","html_url":"https://github.com/rayliverified/CustomAlertViewDialogue","commit_stats":{"total_commits":65,"total_committers":1,"mean_commits":65.0,"dds":0.0,"last_synced_commit":"3541e448d6722c4765ae222b078ebe329ddf7d5b"},"previous_names":[],"tags_count":24,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rayliverified%2FCustomAlertViewDialogue","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rayliverified%2FCustomAlertViewDialogue/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rayliverified%2FCustomAlertViewDialogue/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rayliverified%2FCustomAlertViewDialogue/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rayliverified","download_url":"https://codeload.github.com/rayliverified/CustomAlertViewDialogue/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248476352,"owners_count":21110264,"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":["action","alert","alertview","android","bottom","box","confirmation","contact","dialog","feedback","form","input","menu","message","modal","options","popup","select","selector","sheet"],"created_at":"2024-09-24T14:12:05.607Z","updated_at":"2025-04-11T20:31:49.447Z","avatar_url":"https://github.com/rayliverified.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"![Screenshots](screenshots/Custom-Alertview-Dialogue-Cover_1280x.gif)\r\n\r\n# Custom AlertView Dialogue\r\n\r\n[![GitHub release](https://img.shields.io/github/release/searchy2/CustomAlertViewDialogue.svg?style=flat-square)](https://github.com/searchy2/CustomAlertViewDialogue/releases) [![GitHub Release Date](https://img.shields.io/github/release-date/searchy2/CustomAlertViewDialogue.svg?style=flat-square)](https://github.com/searchy2/CustomAlertViewDialogue) [![Libraries.io for GitHub](https://img.shields.io/librariesio/github/searchy2/CustomAlertViewDialogue.svg?style=flat-square)](https://github.com/searchy2/CustomAlertViewDialogue) [![GitHub issues](https://img.shields.io/github/issues/searchy2/CustomAlertViewDialogue.svg?style=flat-square)](https://github.com/searchy2/CustomAlertViewDialogue) [![GitHub code size in bytes](https://img.shields.io/github/languages/code-size/searchy2/CustomAlertViewDialogue.svg?style=flat-square)](https://github.com/searchy2/CustomAlertViewDialogue) [![API](https://img.shields.io/badge/API-15%2B-blue.svg?style=flat-square)](https://github.com/searchy2/CustomAlertViewDialogue) [![GitHub top language](https://img.shields.io/github/languages/top/searchy2/CustomAlertViewDialogue.svg?style=flat-square)](https://github.com/searchy2/CustomAlertViewDialogue)\r\n\r\n\u003cimg src=\"app/src/main/res/mipmap-xxxhdpi/ic_launcher.png\" width=\"128\"\u003e\r\n\r\n\u003e ### The most advanced Android dialogue library. \r\n\r\nCustom AlertView Dialogue includes simple message popups, confirmation alerts, selector popups, action sheet bottom menus, and input/feedback contact forms. This library fixes many issues and crashes that plague other alert dialogue libraries and looks amazing while doing so! \r\n\r\nCustom AlertView Dialogue is part of the [Custom UI](http://rayliverified.com/index.php/code/) collection of beautiful, minimalistic, and customizable Android UI components.\r\n\r\n![Screenshots](screenshots/Custom-Alert-Dialogue-Screenshot.gif)\r\n\r\n## About\r\n\r\nAndroid alert dialogues are bland, limited in functionality, and visually inconsistent across Android versions. Existing Android dialogue libraries often crashed and were hard to customize. CustomAlertDialogue was created to offer a beautiful alert dialogue with advanced capabilities. Here at Codelessly, we're building a Flutter website/app builder, development tools, and UI templates to increase productivity. If that sounds interesting, you'll want to subscribe to updates below 😎\r\n\r\nCustomAlertViewDialogue is licensed under Zero-Clause BSD and released as Emailware. If you like this project or it helped you, please subscribe to updates. Although it is not required, you might miss the goodies we share!\r\n\r\n\u003ca href=\"https://codelessly.com/?utm_medium=banner\u0026utm_campaign=newsletter_subscribe\" target=\"_blank\"\u003e\u003cimg src=\"https://raw.githubusercontent.com/Codelessly/ResponsiveFramework/master/packages/Email%20Newsletter%20Signup.png\"\u003e\u003c/a\u003e\r\n\r\n# Import\r\n\r\n[![GitHub release](https://img.shields.io/github/release/searchy2/CustomAlertViewDialogue.svg?style=flat-square)](https://github.com/searchy2/CustomAlertViewDialogue/releases)\r\n\r\nAdd this library to `build.gradle`.\r\n\r\n```java\r\nrepositories {\r\n    maven { url 'https://jitpack.io' }\r\n}\r\nimplementation 'com.github.searchy2:CustomAlertViewDialogue:latest-version'\r\n```\r\n# Usage\r\n\r\nCustom AlertView Dialogue uses the Builder format to initialize an alert view programmatically. To display an simple alert message, just drag and drop the following code into your project. It's that easy!\r\n\r\n![Screenshots](screenshots/Simple-Alert_480x.png)\r\n\r\n```java\r\nCustomAlertDialogue.Builder alert = new CustomAlertDialogue.Builder(MainActivity.this)\r\n        .setStyle(CustomAlertDialogue.Style.DIALOGUE)\r\n        .setTitle(\"Custom Alert\")\r\n        .setMessage(\"This is a long description to test the dialogue's text wrapping functionality\")\r\n        .setNegativeText(\"OK\")\r\n        .setOnNegativeClicked(new CustomAlertDialogue.OnNegativeClicked() {\r\n            @Override\r\n            public void OnClick(View view, Dialog dialog) {\r\n                dialog.dismiss();\r\n            }\r\n        })\r\n        .setDecorView(getWindow().getDecorView())\r\n        .build();\r\nalert.show();\r\n``` \r\n**IMPORTANT:** The Dialog Fragment is extremely picky about the `Activity` passed into the builder. If the improper Activity is passed, the dialogue will crash! Here's how to pass the proper Activity in the following cases:\r\n* Activity - construct with `ClassName.this`\r\n* Fragment - construct with `getActivity()`\r\n* ViewHolder - construct with `getActivity().getApplicationContext()`\r\n\r\nDo not attempt to construct the dialogue with `getContext()`. The Builder requires an Activity and passing a Context does not work! \r\n\r\n**Hint:** Passing the DecorView to the Dialogue Builder in setDecorView will create a nice blurred background. Here's how to pass the correct DecorView:\r\n* Activity - use `getWindow().getDecorView()`\r\n* Fragment - use `getActivity().getWindow().getDecorView()`\r\n* Viewholder - use `((Activity) mContext).getWindow().getDecorView()`\r\n\r\n# Examples\r\n\r\nCustom AlertView Dialogue provides many customization methods to display the alerts you need.\r\n\r\n**Simple Alert - a simple popup message.**\r\n\r\n![Screenshots](screenshots/Simple-Alert_480x.png)\r\n\r\n```java\r\nCustomAlertDialogue.Builder alert = new CustomAlertDialogue.Builder(MainActivity.this)\r\n        .setStyle(CustomAlertDialogue.Style.DIALOGUE)\r\n        .setTitle(\"Custom Alert\")\r\n        .setMessage(\"This is a long description to test the dialogue's text wrapping functionality\")\r\n        .setNegativeText(\"OK\")\r\n        .setNegativeColor(R.color.negative)\r\n        .setNegativeTypeface(Typeface.DEFAULT_BOLD)\r\n        .setOnNegativeClicked(new CustomAlertDialogue.OnNegativeClicked() {\r\n            @Override\r\n            public void OnClick(View view, Dialog dialog) {\r\n                dialog.dismiss();\r\n            }\r\n        })\r\n        .setDecorView(getWindow().getDecorView())\r\n        .build();\r\nalert.show();\r\n\r\n```\r\n\r\n**Confirmation Alert - a popup dialogue with two customizable choices.**\r\n\r\n![Screenshots](screenshots/Confirmation-Alert_540x.png)\r\n\r\n```java\r\nCustomAlertDialogue.Builder alert = new CustomAlertDialogue.Builder(MainActivity.this)\r\n        .setStyle(CustomAlertDialogue.Style.DIALOGUE)\r\n        .setCancelable(false)\r\n        .setTitle(\"Delete Items\")\r\n        .setMessage(\"Delete all completed items?\")\r\n        .setPositiveText(\"Confirm\")\r\n        .setPositiveColor(R.color.negative)\r\n        .setPositiveTypeface(Typeface.DEFAULT_BOLD)\r\n        .setOnPositiveClicked(new CustomAlertDialogue.OnPositiveClicked() {\r\n            @Override\r\n            public void OnClick(View view, Dialog dialog) {\r\n                dialog.dismiss();\r\n                Toast.makeText(mContext, \"Items Deleted\", Toast.LENGTH_SHORT).show();\r\n            }\r\n        })\r\n        .setNegativeText(\"Cancel\")\r\n        .setNegativeColor(R.color.positive)\r\n        .setOnNegativeClicked(new CustomAlertDialogue.OnNegativeClicked() {\r\n            @Override\r\n            public void OnClick(View view, Dialog dialog) {\r\n                dialog.dismiss();\r\n            }\r\n        })\r\n        .setDecorView(getWindow().getDecorView())\r\n        .build();\r\nalert.show();\r\n```\r\n\r\n**Selector - a scrollable list of options.**\r\n\r\n![Screenshots](screenshots/Selector_500x.png)\r\n\r\n```java\r\nArrayList\u003cString\u003e destructive = new ArrayList\u003c\u003e();\r\ndestructive.add(\"Choice 1\");\r\n\r\nArrayList\u003cString\u003e other = new ArrayList\u003c\u003e();\r\nother.add(\"Choice 2\");\r\nother.add(\"Choice 3\");\r\nother.add(\"Choice 4\");\r\nother.add(\"Choice 5\");\r\nother.add(\"Choice 6\");\r\nother.add(\"Choice 7\");\r\nother.add(\"Choice 8\");\r\nother.add(\"Choice 9\");\r\nother.add(\"Choice 10\");\r\nother.add(\"Choice 11\");\r\nother.add(\"Choice 12\");\r\nother.add(\"Choice 13\");\r\nother.add(\"Choice 14\");\r\nother.add(\"Choice 15\");\r\nother.add(\"Choice 16\");\r\nother.add(\"Choice 17\");\r\nother.add(\"Choice 18\");\r\nother.add(\"Choice 19\");\r\nother.add(\"Choice 20\");\r\n\r\nCustomAlertDialogue.Builder alert = new CustomAlertDialogue.Builder(MainActivity.this)\r\n        .setStyle(CustomAlertDialogue.Style.SELECTOR)\r\n        .setDestructive(destructive)\r\n        .setOthers(other)\r\n        .setOnItemClickListener(new AdapterView.OnItemClickListener() {\r\n            @Override\r\n            public void onItemClick(AdapterView\u003c?\u003e adapterView, View view, int i, long l) {\r\n                CustomAlertDialogue.getInstance().dismiss();\r\n                Toast.makeText(mContext, \"Selected \" + i, Toast.LENGTH_SHORT).show();\r\n            }\r\n        })\r\n        .setDecorView(getWindow().getDecorView())\r\n        .build();\r\nalert.show();\r\n```\r\n\r\n**Action Sheet - a highly customizable bottom menu.**\r\n\r\n![Screenshots](screenshots/Action-Sheet_540x.png)\r\n\r\n```java\r\nArrayList\u003cString\u003e other = new ArrayList\u003cString\u003e();\r\nother.add(\"Copy\");\r\nother.add(\"Forward\");\r\n\r\nCustomAlertDialogue.Builder alert = new CustomAlertDialogue.Builder(MainActivity.this)\r\n        .setStyle(CustomAlertDialogue.Style.ACTIONSHEET)\r\n        .setTitle(\"Action Sheet\")\r\n        .setTitleColor(R.color.text_default)\r\n        .setCancelText(\"More...\")\r\n        .setOnCancelClicked(new CustomAlertDialogue.OnCancelClicked() {\r\n            @Override\r\n            public void OnClick(View view, Dialog dialog) {\r\n                Vibrator vibe = (Vibrator) mContext.getSystemService(Context.VIBRATOR_SERVICE);\r\n                vibe.vibrate(10);\r\n                dialog.dismiss();\r\n                Handler handler = new Handler();\r\n                Runnable r = new Runnable() {\r\n                    public void run() {\r\n                        MoreSelector();\r\n                    }\r\n                };\r\n                handler.postDelayed(r, 50);\r\n            }\r\n        })\r\n        .setOthers(other)\r\n        .setOnItemClickListener(new AdapterView.OnItemClickListener() {\r\n            @Override\r\n            public void onItemClick(AdapterView\u003c?\u003e adapterView, View view, int i, long l) {\r\n                String selection = adapterView.getItemAtPosition(i).toString();\r\n                Vibrator vibe = (Vibrator) mContext.getSystemService(Context.VIBRATOR_SERVICE);\r\n                vibe.vibrate(10);\r\n                switch (selection)\r\n                {\r\n                    case \"Copy\":\r\n                        CustomAlertDialogue.getInstance().dismiss();\r\n                        Toast.makeText(mContext, \"Copied\", Toast.LENGTH_SHORT).show();\r\n                        break;\r\n                    case \"Forward\":\r\n                        CustomAlertDialogue.getInstance().dismiss();\r\n                        Toast.makeText(mContext, \"Forwarded\", Toast.LENGTH_SHORT).show();\r\n                        break;\r\n                }\r\n            }\r\n        })\r\n        .setDecorView(getWindow().getDecorView())\r\n        .build();\r\nalert.show();\r\n```\r\n\r\n**Input Box - helps collect user input. Can be used as a contact/feedback form.**\r\n\r\n![Screenshots](screenshots/Input-Box_540x.png)\r\n\r\n```java\r\nArrayList\u003cString\u003e lineHint = new ArrayList\u003c\u003e();\r\nlineHint.add(\"Username\");\r\nlineHint.add(\"Email Address\");\r\nlineHint.add(\"Name\");\r\nlineHint.add(\"Zip Code\");\r\n\r\nArrayList\u003cString\u003e lineText = new ArrayList\u003c\u003e();\r\nlineText.add(\"sampleuser\");\r\nlineText.add(null);\r\nlineText.add(\"Sample User\");\r\n\r\nArrayList\u003cString\u003e boxHint = new ArrayList\u003c\u003e();\r\nboxHint.add(\"Message\");\r\n\r\nArrayList\u003cString\u003e boxText = new ArrayList\u003c\u003e();\r\nboxText.add(\"BoxText\");\r\n\r\nCustomAlertDialogue.Builder alert = new CustomAlertDialogue.Builder(MainActivity.this)\r\n        .setStyle(CustomAlertDialogue.Style.INPUT)\r\n        .setTitle(\"Submit Feedback\")\r\n        .setMessage(\"We love to hear feedback! Please share your thoughts and comments:\")\r\n        .setPositiveText(\"Submit\")\r\n        .setPositiveColor(R.color.positive)\r\n        .setPositiveTypeface(Typeface.DEFAULT_BOLD)\r\n        .setOnInputClicked(new CustomAlertDialogue.OnInputClicked() {\r\n            @Override\r\n            public void OnClick(View view, Dialog dialog, ArrayList\u003cString\u003e inputList) {\r\n                Toast.makeText(mContext, \"Sent\", Toast.LENGTH_SHORT).show();\r\n                for (String input : inputList)\r\n                {\r\n                    Log.d(\"Input\", input);\r\n                }\r\n                dialog.dismiss();\r\n            }\r\n        })\r\n        .setNegativeText(\"Cancel\")\r\n        .setNegativeColor(R.color.negative)\r\n        .setOnNegativeClicked(new CustomAlertDialogue.OnNegativeClicked() {\r\n            @Override\r\n            public void OnClick(View view, Dialog dialog) {\r\n                dialog.dismiss();\r\n            }\r\n        })\r\n        .setLineInputHint(lineHint)\r\n        .setLineInputText(lineText)\r\n        .setBoxInputHint(boxHint)\r\n        .setBoxInputText(boxText)\r\n        .setDecorView(getWindow().getDecorView())\r\n        .build();\r\nalert.show();\r\n```\r\n\r\n# Customization\r\n\r\n### Override Fullscreen\r\n\r\nBy default, showing an alert dialogue enters fullscreen mode. This behavior can be disabled by overriding the dialogue's style.\r\nPlace the following code in your project's `style.xml` to override the dialogue's style and disable fullscreen mode.\r\n\r\n```\r\n\u003c!-- Override AlertView Dialogue Fullscreen --\u003e\r\n\u003cstyle name=\"CustomDialog\" parent=\"android:Theme.Dialog\"\u003e\r\n    \u003citem name=\"android:windowNoTitle\"\u003etrue\u003c/item\u003e\r\n    \u003citem name=\"android:windowFullscreen\"\u003efalse\u003c/item\u003e\r\n    \u003citem name=\"android:windowContentOverlay\"\u003e@null\u003c/item\u003e\r\n    \u003citem name=\"android:windowBackground\"\u003e@android:color/transparent\u003c/item\u003e\r\n    \u003citem name=\"android:backgroundDimEnabled\"\u003etrue\u003c/item\u003e\r\n    \u003citem name=\"android:backgroundDimAmount\"\u003e0.5\u003c/item\u003e\r\n    \u003citem name=\"android:windowIsFloating\"\u003efalse\u003c/item\u003e\r\n    \u003citem name=\"android:gravity\"\u003ecenter\u003c/item\u003e\r\n\u003c/style\u003e\r\n```\r\n\r\n### Builder Attributes\r\n\r\n|Attribute|Description| \r\n|--|--|\r\n|setStyle(Style style)|Set AlertView type \u003c/br\u003e `DIALOGUE` \u003c/br\u003e `ACTIONSHEET` \u003c/br\u003e `SELECTOR` \u003c/br\u003e `INPUT`|\r\n|setTitle(String title)|set AlertView title text|\r\n|setMessage(String message)|setMessage(String message)|\r\n|setPositiveText(String positiveButtonText)|set Confirmation Alert right button text|\r\n|set Confirmation Alert right button text|set Confirmation Alert right button text|\r\n|set Confirmation Alert right button text|set Action Sheet cancel button text|\r\n|setTitleColor(int titleColor)|set title text color|\r\n|setMessageColor(int messageColor)|set message text color|\r\n|setPositiveColor(int positiveTextColor)|set positive button text color|\r\n|setNegativeColor(int negativeColor)|set negative button text color|\r\n|setCancelColor(int cancelColor)|set cancel button text color|\r\n|set cancel button text color|set title text font. Must pass the path to the font in the assets folder|\r\n|setMessageFont(String bodyFontPath)|set message text font. Must pass the path to the font in the assets folder|\r\n|setPositiveTypeface(Typeface positiveTypeface)|set positive button text typeface|\r\n|set positive button text typeface|set positive button text typeface|\r\n|setOnPositiveClicked(OnPositiveClicked onPositiveClicked)|pass a listener to be called when the positive button is clicked|\r\n|setOnNegativeClicked(OnNegativeClicked onNegativeClicked)|pass a listener to be called when the negative button is clicked|\r\n|setOnCancelClicked(OnCancelClicked onCancelClicked)|pass a listener to be called when the cancel button is clicked|\r\n|setOnItemClickListener(AdapterView.OnItemClickListener onItemClickListener)|pass a listener to be called when a selection item is clicked|\r\n|setOnInputClicked(OnInputClicked onInputClicked)|pass a listener to be called when an input box is submitted|\r\n|setDestructive(ArrayList\u003cString\u003e destructive)|converts a String ArrayList into destructive options in the selector|\r\n|setOthers(ArrayList\u003cString\u003e others)|converts a String ArrayList into neutral options in the selector|\r\n|setLineInputText(ArrayList\u003cString\u003e lineInputText)|converts a String ArrayList into single line text input boxes|\r\n|setLineInputHint(ArrayList\u003cString\u003e lineInputHint)|converts a String ArrayList into single line input boxes hints. Array length must match LineInputText length.|\r\n|setBoxInputText(ArrayList\u003cString\u003e boxInputText)|setBoxInputText(ArrayList\u003cString\u003e boxInputText)|\r\n|setBoxInputText(ArrayList\u003cString\u003e boxInputText)|converts a String ArrayList into multiline input boxes hints. Array length must match BoxInputText length|\r\n|setAutoHide(boolean autoHide)|set `true` to automatically hide alert after a set time|\r\n|setTimeToHide(int timeToHide)|set time in milliseconds for popup to automatically dismiss. No listeners are triggered when dismissed automatically.|\r\n|setCancelable(boolean cancelable)|set false to prevent dialogue dismissal through tapping outside or pressing the back button. Force the user to choose an option.|\r\n|setDecorView(View decorView)|pass the Window DecorView for a nice blurred background. Defaults to overlay color.|\r\n|build()|construct the Dialogue Builder|\r\n|show()|display the Dialogue with Builder parameters|\r\n\r\nView the Layouts section or the sample app for examples of how to use these Builder attributes. \r\n\r\n### New Layout Creation\r\n\r\nCustom AlertView Dialogue provides a powerful framework to creating new alert layouts quickly. If one of the existing alerts do not meet your needs, creating a new alert is very simple! You can take advantage of the existing dialogue code and just declare a new style in the Style enumerator. \r\n\r\nOnce you have a new style, you can duplicate an existing layout or start from scratch. Dialog Fragment behaves much like a regular fragment with support for RecyclerViews and Relative Layouts. Most existing layout and code can be dragged and dropped into a Dialog Fragment. **Note:** ViewPagers cannot be placed in a Dialog Fragment because Dialog Fragments do not support ViewPagers (an entire day's work was lost due to this unfortunate limitation :P).\r\n\r\nWith your new layout, all that is left is adding the corresponding code and listener callbacks. Most code works well within a Dialog Fragment just like layouts do. If you wish to pass back information, follow the existing examples to create your own onClickListener callback. \r\n\r\nCreate the necessary Builder methods to customize your new layout and you're done! \r\n\r\n# Features Wishlist\r\n\r\nThese features would make this library even more awesome. You can contribute to this library by developing any of the features below. Or, if you really want to see a feature developed, you can sponsor me to develop the feature.\r\n\r\n---\r\n\r\n\u003eDynamic Blur Background ✔️ (Completed 2/22/2018)\r\n\r\nThanks to [@Dimezis](https://github.com/Dimezis) for fixing his [BlurView](https://github.com/Dimezis/BlurView) library to work with DialogFragments. Without Dimezis's help, there would be no blurred background! \r\n\r\n\u003eDate Selector\r\n\r\nThere are a lot of ugly date selectors. Then their are a lot of beautiful date selectors that don't calculate dates correctly or require a time to be selected as well. A beautiful, dedicated date selector with correct date calculation would be wonderful!\r\n\r\n\u003eSlider Value Picker\r\n\r\nThe easiest way to choose a number is with a slider. Having a slider integrated into this library would help cover many number entry scenarios. \r\n\r\n\u003eNumber Setter\r\n\r\nThis is a more precise way to select small numbers or numbers that do not change much. The number setter would have a text box in the middle that accepts direct number input and buttons on either side to increment or decrease the number. \r\n\r\n---\r\n\r\nPull requests are most welcome!\r\n\r\nIf you've fixed a bug or have a feature you've added, just create a pull request. If you've found a bug, file an issue. If you have any questions or would like to discuss upcoming features, please get in touch. You can get in touch with me in the Contact section below. \r\n\r\n# ★ Acknowledgements ★\r\n**♥ Developer ♥**\r\n\r\n[Ray Li](https://rayliverified.com)\r\n\r\n**♥ Designer ♥**\r\n\r\n[Ray Li](https://rayliverified.com)\r\n\r\n**♥ Inspiration ♥**\r\n\r\nUI design and functionality - https://github.com/saiwu-bigkoo/Android-AlertView\r\n\r\nDialog Fragment code - https://github.com/geniusforapp/fancyDialog\r\n\r\n**♥ Sponsor ♥**\r\n\r\n[Codelessly - Flutter Website and App Builder](https://codelessly.com/?utm_medium=link\u0026utm_campaign=direct)\r\n\r\n# ★ Get in Touch ★\r\n\u003ca href=\"mailto:ray@codelessly.com\"\u003e\r\n  \u003cimg alt=\"Ray Li Email\"\r\n       src=\"https://lh3.googleusercontent.com/yN_m90WN_HSCohXdgC2k91uSTk9dnYfoxTYwG_mv_l5_05dV2CzkQ1B6rEqH4uqdgjA=w96\" /\u003e\r\n\u003c/a\u003e\r\n\u003ca href=\"https://rayliverified.com\"\u003e\r\n  \u003cimg alt=\"Ray Li Website\"\r\n       src=\"https://lh3.googleusercontent.com/YmMGcgeO7Km9-J9vFRByov5sb7OUKetnKs8pTi0JZMDj3GVJ61GMTcTlHB7u9uHDHag=w96\" /\u003e\r\n\u003c/a\u003e\r\n\u003ca href=\"https://twitter.com/RayLiVerified\"\u003e\r\n  \u003cimg alt=\"Ray Li Twitter\"\r\n       src=\"https://lh3.ggpht.com/lSLM0xhCA1RZOwaQcjhlwmsvaIQYaP3c5qbDKCgLALhydrgExnaSKZdGa8S3YtRuVA=w96\" /\u003e\r\n\u003c/a\u003e\r\n\u003ca href=\"https://linkedin.com/in/rayliverified/\"\u003e\r\n  \u003cimg alt=\"Ray Li LinkedIn\"\r\n       src=\"https://lh3.googleusercontent.com/00APBMVQh3yraN704gKCeM63KzeQ-zHUi5wK6E9TjRQ26McyqYBt-zy__4i8GXDAfeys=w90\" /\u003e\r\n\u003c/a\u003e\r\n\u003ca href=\"https://www.uplabs.com/ray\"\u003e\r\n  \u003cimg alt=\"Ray Li UpLabs\"\r\n       src=\"https://lh3.googleusercontent.com/fDJB4jtIgZQF_Dj7AFAPEv2dJOJE8LaLSbaiOOFejQJl3oFbkOLLScstkp699oMDcEU=w90\" /\u003e\r\n\u003c/a\u003e\r\n\u003ca href=\"https://github.com/searchy2\"\u003e\r\n  \u003cimg alt=\"Ray Li GitHub\"\r\n       src=\"https://lh3.googleusercontent.com/L15QqmKK7Vl-Ag1ZxaBqNQlXVEw58JT2BDb-ef5t2eboDh0pPSLjDgi3-aQ3Opdhhyk=w96\" /\u003e\r\n\u003c/a\u003e\r\n\r\n# Apps Using This Library\r\n\r\nAdd your app here by making a `pull request`. \r\n\r\n\u003ctable\u003e\r\n    \u003ctr\u003e\r\n\t\t\u003ctd\u003e\u003cimg src=\"https://lh3.googleusercontent.com/tYGJBG8mc7lwC0ZxQUxif2FVMFI8L8xRkPON0ytkWVPTI67ggkrgDl3JpRu9jW0W3sLJ=w64\"/\u003e\u003c/td\u003e\r\n\t\t\u003ctd\u003e\u003ca href=\"https://github.com/searchy2/Rocket-Notes\"\u003eRocket Notes\u003c/a\u003e\u003c/td\u003e\r\n\t\u003c/tr\u003e\r\n\t\u003ctr\u003e\r\n\t\t\u003ctd\u003e\u003cimg src=\"https://lh3.googleusercontent.com/R-vJInTblK1KBOqZaSDm_ac270QBHsiIcU9agHnN-rrp9K_lkN8rLzGIH8asCfkb420Q=w64\"/\u003e\u003c/td\u003e\r\n\t\t\u003ctd\u003e\u003ca href=\"https://play.google.com/store/apps/details?id=io.ideastarter\"\u003eCrowdfunding Community\u003c/a\u003e\u003c/td\u003e\r\n\t\u003c/tr\u003e\r\n    \u003ctr\u003e\r\n\t\t\u003ctd\u003e\u003cimg src=\"https://lh3.googleusercontent.com/CT1M2pKlUhGx4w5UHqarn6oSU_sa7L7XRW2-hQrfNi9oou6W81PbJnWi-9PbEfC_3g=w64\"/\u003e\u003c/td\u003e\r\n\t\t\u003ctd\u003e\u003ca href=\"https://play.google.com/store/apps/details?id=com.blankicon\"\u003eBlank Icon\u003c/a\u003e\u003c/td\u003e\r\n\t\u003c/tr\u003e\r\n\u003c/table\u003e\r\n\r\n## Search Terms\r\nandroid, alert, alertview, popup, dialog, dialogs, select, selector, confirmation, bottom menu, action sheet, chooser, choice, options, display, input, box, message, contact, feedback, form, modal\r\n\r\n## License\r\n\r\n    BSD Zero Clause License\r\n\r\n    Copyright © 2020 Ray Li\r\n\r\n    Permission to use, copy, modify, and/or distribute this software for any\r\n    purpose with or without fee is hereby granted.\r\n\r\n    THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\n    REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\n    AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\n    INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\n    LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\n    OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\n    PERFORMANCE OF THIS SOFTWARE.\r\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frayliverified%2Fcustomalertviewdialogue","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frayliverified%2Fcustomalertviewdialogue","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frayliverified%2Fcustomalertviewdialogue/lists"}