LDialog基于DialogFragment封装的库,也许是一个Nice的库[亲测有效]

LDialog基于DialogFragment封装的库,也许是一个Nice的库[亲测有效]一个基于Google推荐的DialogFragment封装的的库,根据自身业务提取封装,本库全部使用kotlin编写,java亦可调用,能满足大部分的项目需求,能在Activity与Fragment中使用。本项目准则即是遵守最大化的自由程度。 本库分为必须导入的LDialog和…

先放上地址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

预览

LDialog基于DialogFragment封装的库,也许是一个Nice的库[亲测有效]

由于录屏的限制无法录制横竖切换情况。请下载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() {
		@Override
		public void onClick(View v) {
			Toast.makeText(JavaDemo.this, "Decline", Toast.LENGTH_SHORT).show()
        }
    })
    .setPositiveButton("Accept", new View.OnClickListener() {
        @Override
        public 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_share

    override 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 at

   http://www.apache.org/licenses/LICENSE-2.0

Unless 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.

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/13578.html

(0)

相关推荐

  • mongodb的配置文件_mongodb配置文件详解

    mongodb的配置文件_mongodb配置文件详解# mongod.conf # for documentation of all options, see: # http://docs.mongodb.org/manual/reference/co

    2023-03-19
    172
  • 数据库图解_海量数据云图数据库

    数据库图解_海量数据云图数据库数据库也是计算机类笔试面试中不可避免会遇到的考点,尤其是银行和部分传统软件类公司。这里根据整理的资料,对数据库的相关知识也做个总结吧。希望学过数据库但长时间不用的同学根据这些知识能够回忆和重拾,没学…

    2023-03-17
    145
  • Python锚点:优化网页链接导航

    Python锚点:优化网页链接导航锚点是HTML中用于跳转到文档内部特定位置的一种常用方式。使用锚点可以很方便地链接到页面中的某个特定位置,并且可以使用户更加快速、方便地找到所需信息。Python中可以使用a href=”#”#/a来定义锚点,使用a href=”#anchor_name”Anchor Text/a来链接到指定锚点。

    2024-01-13
    95
  • 用Python读取文件的方法

    用Python读取文件的方法在现实生活和工作场景中,读取文件是我们经常需要处理的任务之一。Python作为一种高级编程语言,提供了多种方法来读取文件。在这篇文章中,我们将介绍Python中常用的文件读取方法,以及如何应用这些方法来有效地读取多种类型的文件。

    2024-05-11
    70
  • TiDB在360的落地及实战干货「建议收藏」

    TiDB在360的落地及实战干货「建议收藏」背景 Part1:写在最前 当一张百亿数据量的表放在你面前,你将面临着什么? 加列?哭吧,怎么也得等个几天甚至几周。加索引?哭吧,不论你用pt-online-schema,还是gh-ost,你都面临…

    2023-02-20
    132
  • 达梦数据库管理工具_达梦数据库多行数据合并成一行

    达梦数据库管理工具_达梦数据库多行数据合并成一行一 前言 在实际生产环境中,我们常常会遇到表空间不足的问题,针对此类问题,只要我们的磁盘空间充足,我们可以通过更改数据文件大小、添加新的数据文件等方式来解决; 管理数据文件的操作需要 DM服务器处于打

    2023-03-11
    158
  • 开源的自定义表单设计器基础源码,PC端+移动端[亲测有效]

    开源的自定义表单设计器基础源码,PC端+移动端[亲测有效]介绍自定义表单设计器,这是一个现代化应用中一个加分的模块,目前很多大型的系统都会存在很多表单,针对不同的客户,可能表单都会不一样,而且不够灵活,

    2023-06-27
    142
  • mysql 慢sql查询_web服务器反应慢的排查方法

    mysql 慢sql查询_web服务器反应慢的排查方法company_id和odds_typeid的值并不够散列(company_id表少于1k条就表示不够散列),不必要创建索引。 出现慢sql警告,排查语句是否有问题。 mysql> SELECT *…

    2023-03-26
    168

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注