先放上地址GitHub,欢迎star,也欢迎给我发issues

LDialog

一个基于Google推荐的DialogFragment封装的的库,根据自身业务提取封装,本库全部使用kotlin编写,java亦可调用,能满足大部分的项目需求,能在Activity与Fragment中使用。本项目准则即是遵守最大化的自由程度。

本库目前已具备的特点如下:

  • 横竖屏旋转保存Dialog属性状态(并且能保持DialogFragment的事件状态,例如点击事件)
  • 完全的自定义界面
  • 丰富的界面属性设置
  • 完美的键盘自动弹出(并非使用延迟的方法)

使用建议: DialogFragment相对于AlertDialog有很多优点。但对于只需要非常简单信息提示、仅需要原生样式,以及不考虑横竖屏的情况下,推荐使用更简单的AlertDialog,请不要把简单问题复杂化。DialogFragment适合用有UI要求、使用要求的情况下。

源码说明:
如果你还没上手koltin,建议学习使用。本库的环境版本如下:

  • kotlin 1.2.51
  • Android support 27.1.1

预览

由于录屏的限制无法录制横竖切换情况。请下载demo体验

demo下载地址

demo apk

获取

本库分为必须导入的LDialog和非必须的CustomLDialog
LDialog为基础库;CustomLDialog中包含了自定义的样式,不需要可以不导入。
先在 build.gradle 的 repositories 添加:

allprojects {repositories {...maven { url 'https://jitpack.io' }}
}
复制代码

再在dependencies添加:

dependencies {//必须导入implementation 'com.github.limuyang2.LDialog:ldialog:1.0'//3种自定义样式,不使用就不导入implementation 'com.github.limuyang2.LDialog:custom_ldialog:1.0'
}
复制代码

简单使用

LDialog与CustonLDialog均继承于BaseLDialog类。

init()中的参数,Activity中使用supportFragmentManagerFragment中使用childFragmentManager

CustonLDialog 使用方式

目前里面包含3种自定义样式:

  • IOSMsgDialog
  • MaterialMsgDialog
  • BottomTextListDialog

以下以MaterialMsgDialog为示例:

//koltin
MaterialMsgDialog.init(supportFragmentManager) //Freagment中使用childFragmentManager.setTitle("Material Style").setMessage("This is Material Design dialog!").setNegativeButton("Decline", View.OnClickListener {Toast.makeText(this@MainActivity, "Decline", Toast.LENGTH_SHORT).show()}).setPositiveButton("Accept", View.OnClickListener {Toast.makeText(this@MainActivity, "Accept", Toast.LENGTH_SHORT).show()}).show()
复制代码
//java
MaterialMsgDialog.Companion.init(getSupportFragmentManager()).setTitle("Material Style").setMessage("This is Material Design dialog!").setNegativeButton("Decline", new View.OnClickListener() {@Overridepublic void onClick(View v) {Toast.makeText(JavaDemo.this, "Decline", Toast.LENGTH_SHORT).show()}}).setPositiveButton("Accept", new View.OnClickListener() {@Overridepublic void onClick(View v) {Toast.makeText(JavaDemo.this, "Accept", Toast.LENGTH_SHORT).show()}}).show();
复制代码

LDialog 使用方式 (主要使用方式)

用对外提供使用 layoutRes 自定义布局。
示例如下:

//kotlin
LDialog.init(supportFragmentManager).setLayoutRes(R.layout.ldialog_share).setBackgroundDrawableRes(R.drawable.shape_share_dialog_bg).setGravity(Gravity.BOTTOM).setWidthScale(0.95f).setVerticalMargin(0.015f).setAnimStyle(R.style.LDialogBottomAnimation).setViewHandlerListener(object : ViewHandlerListener() {override fun convertView(holder: ViewHolder, dialog: BaseLDialog<*>) {holder.setOnClickListener(R.id.cancelBtn, View.OnClickListener {dialog.dismiss()})}}).show()
复制代码

Java使用请参考项目下的 JavaDemo.java

方法说明

方法名 说明
setLayoutRes 设置布局资源【优先级高于setLayoutView】【仅LDialog,必须】
setLayoutView 设置布局view(不推荐使用)【仅LDialog,必须】
* setViewHandlerListener (重要)设置布局中控件的属性。如果【需要】考虑横竖屏旋转,则控件的相关属性必须在此设置。建议对布局中控件的设置均写在此处。【仅LDialog,必须】
通用方法(BaseLDialog)
setBackgroundDrawableRes 弹窗背景资源文件id
setTag DialogFragment的标签
setDismissListener 弹窗的关闭监听
setGravity 窗体位置(例:Gravity.CENTER Gravity.TOP)
setWidthScale 占屏幕宽度的比例(范围0.0 - 1.0,当为1.0时即为铺满)【优先级高于setWidthDp】
setWidthDp Dialog的宽度,单位dp
setHeightScale 占屏幕高度的比例(范围0.0 - 1.0)【优先级高于setHeightDp】
setHeightDp Dialog的高度,单位dp
setKeepWidthScale 横屏时,是否保持设置的宽度比例【仅当设置了宽度比例setWidthScale后,才生效】(默认false)
setKeepHeightScale 横屏时,是否保持设置的高度比例【仅当设置了高度比例setHeightScale后,才生效】(默认false)
setVerticalMargin 设置垂直方向的Margin值(范围0.0 - 0.1)
setCancelableAll 设置是否可以点击dialog外及返回键关闭dialog
setCancelableOutside 设置是否可以点击dialog外关闭dialog(返回键不受影响)
setAnimStyle 动画Style资源文件id
setNeedKeyboardEditTextId 设置需要自动弹出键盘的控件id,必须是EditText类型的控件
show 显示Dialog

高级使用

如果以上仍然无法满足你们的需求,那可以直接继承BaseLDialog类,同时也就具备了通用方法。具体可参考CustonLDialog中的三个弹窗类。
基本写法如下:

class ExKotlinLdialog : BaseLDialog<ExKotlinLdialog>() {override fun layoutRes(): Int = R.layout.ldialog_shareoverride fun layoutView(): View? = null/*** 必须* 如果【需要】考虑横竖屏旋转,则控件的相关属性在此设置* @return*/override fun viewHandler(): ViewHandlerListener? {return object : ViewHandlerListener() {override fun convertView(holder: ViewHolder, dialog: BaseLDialog<*>) {}}}/*** 可选* 如果【不】考虑横竖屏旋转,也可以在此设置控件属性* @param view*/override fun initView(view: View) {}
}
复制代码

Java使用请参考项目下的 ExJavaLdialog.java

License

2018 limuyang
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License athttp://www.apache.org/licenses/LICENSE-2.0Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
复制代码

LDialog基于DialogFragment封装的库,也许是一个Nice的库相关推荐

  1. 不是python中用于开发用户界面的第三方库-20个必不可少的Python库也是基本的第三方库...

    传智播客博学谷 微信号:boxuegu- get最新最全的IT技能 免费领取各种视频资料 今天将介绍20个常用工具的Python库,我相信你看完之后也会觉得离不开它们.他们是: Requests.Ke ...

  2. 库 python_20个必不可少的Python库也是基本的第三方库

    今天将介绍20个常用工具的Python库,我相信你看完之后也会觉得离不开它们.他们是: Requests.Kenneth Reitz写的最富盛名的http库.每个Python程序员都应该有它. Scr ...

  3. python的第三方库是干什么用的-20个必不可少的Python库也是基本的第三方库

    传智播客博学谷 微信号:boxuegu- get最新最全的IT技能 免费领取各种视频资料 今天将介绍20个常用工具的Python库,我相信你看完之后也会觉得离不开它们.他们是: Requests.Ke ...

  4. 20个必不可少的Python库也是基本的第三方库

    引用: https://www.cnblogs.com/jiangchunsheng/p/9275881.html 读者您好.今天我将介绍20个属于我常用工具的Python库,我相信你看完之后也会觉得 ...

  5. python必备第三方库-20个必不可少的Python库也是基本的第三方库

    传智播客博学谷 微信号:boxuegu- get最新最全的IT技能 免费领取各种视频资料 今天将介绍20个常用工具的Python库,我相信你看完之后也会觉得离不开它们.他们是: Requests.Ke ...

  6. 一千个 Python 库打包,这就是一篇库的字典,哪里需要查哪里!

    环境管理 管理 Python 版本和环境的工具 p – 非常简单的交互式 python 版本管理工具. pyenv – 简单的 Python 版本管理工具. Vex – 可以在虚拟环境中执行命令. v ...

  7. 20个必不可少的Python库也是基本的第三方库(转载)

    20个必不可少的Python库也是基本的第三方库 读者您好.今天我将介绍20个属于我常用工具的Python库,我相信你看完之后也会觉得离不开它们.他们是: Requests.Kenneth Reitz ...

  8. [Axios] 基于Promise封装属于自己的Ajax库

    基于Promise封装属于自己的Ajax库 自己封装ajax库 ;(function anonymous(window) {//支持设置默认的参数配置项let _default = {method: ...

  9. 档案电子封装包Java类,email: Android电子邮件库(基于JavaMail封装)

    Email for Android Email for Android是基于JavaMail封装的电子邮件库,简化在Android客户端中编写发送和接收电子邮件的的代码.把它集成到你的Android项 ...

最新文章

  1. CenTos6.8安装Heartbeat
  2. 新手探索NLP(八)——序列标注
  3. Python基础第三课
  4. Linux压缩打包命令
  5. 左手代码右手滑板 支付宝这个程序员有些酷
  6. 地图标记点击成超链接_纯干货!株洲100多家美食地图!国庆收藏!
  7. 阿里巴巴开源技术汇总:115个软件(五)
  8. 《R in Action》读书笔记(3) 数据变换
  9. 教你快速学习PID控制原理
  10. Win10运行红色警戒2尤里的复仇联机技巧+防守地图
  11. 全志8916平台MIPI_LCD调试方法
  12. Jenkins的安装及使用
  13. Anaconda奇怪问题记录:WARNING conda.exceptions:print_unexpected_error_report(1251): KeyError(‘pkgs_dirs‘)
  14. 苹果cms怎么更换模板教程
  15. stm32f10x.h解析
  16. Java游戏开发 —— 象棋
  17. python爬虫疫情可视化
  18. oracle—高级查询
  19. 模拟登陆西电研究生教务处(爬虫1)
  20. python读取文件,并指定跳过的行数

热门文章

  1. 改变jupyter notebook的主题背景颜色
  2. tensorflow GPU python cuda cudnn 匹配
  3. 《白话法律42讲》读后感
  4. vmware虚拟机ubuntu开机黑屏问题解决
  5. es6 日期字符串转日期_量化数据预处理-中文日期(含)转英文日期
  6. 2020-11-11 C++函数后面加“:”的含义
  7. 极光推送后台php接口,极光推送Jpush(v2)接口 服务端PHP版本的REST API推送类
  8. mysql通过视图查看_MySQL教程92-MySQL查看视图
  9. 利用递归、迭代解决斐波那契数列问题与汉诺塔难题
  10. android6 运行,Xbox串流开放测试,只需安卓6即可运行