Code Monkey home page Code Monkey logo

fancydialog's Introduction

FancyDialog

Usage

allprojects {
    repositories {
    ...
     maven { url 'https://jitpack.io' }
 implementation 'com.github.o0o0oo00:FancyDialog:version'

DSL风格代替Builder模式

domain specific language / DSL 一组特定的语言结构

DSL风格或者也可以说是函数式风格

Java使用Builder来构建复杂对象。

而Kotlin中配合lambad 使用DSL风格 将使复杂对象的构建更加可读,更清晰,更简洁

书写起来舒服顺手

FancyDialog 拥有诸多的配置选项、基本上涵盖了日常开发使用的方方面面

配置项为更简洁的代码、用多少写多少、不用不写,岂不美哉~

安排!

首先我们要明白lambda的几个特性

  • 如果lambda是函数的最后一个参数,可以放在括号外面
  • 如果lambda是函数的唯一参数,它可以放在括号外面并且省略括号
  • 指定接收者的lambda
  • 高阶函数代替传统的自定义回调接口

通过**apply(block)** 来配置dialog所需要的参数。而不需要通过不断的**.setXXX**来设置

Tips :
使用高阶函数会带来一些运行时的效率损失:每一个函数都是一个对象,并且会捕获一个闭包。 即那些在函数体内会访问到的变量。 内存分配(对于函数对象和类)和虚拟调用会引入运行时间开销。
进而使用 inline 修饰函数

使用姿势

关键属性解析

  • mWidth / mHeight 宽度和高度
  • mGravity 居中/居*
  • mOffsetX / mOffsetY 位置偏移量
  • touchOutside 触摸外部消失
  • lowerBackground 降级dialog背景,配合newToast可实现 Alert警告框不会被Dialog阴影覆盖掉

下面提供几种常见的dialog使用形式

如果需要其他使用类型,请自行继承Base,相信我,它超级简单的 ! (* ̄3 ̄)╭

askDialog

normal

askDialog(supportFragmentManager) {
    mTitle = "标题"
    sureClick {
        Toast.makeText(this@MainActivity, "sure", Toast.LENGTH_SHORT).show()
    }
    cancelClick {
        Toast.makeText(this@MainActivity, "cancel", Toast.LENGTH_SHORT).show()
    }
}

onlySure

askDialog(supportFragmentManager) {
    mTitle = "标题"
    mMessage = "摘要vv摘要摘要摘要摘要摘要"
    mGravity = Gravity.TOP
    onlySure = true
    sureClick {
        Toast.makeText(this@MainActivity, "sure", Toast.LENGTH_SHORT).show()
    }
}

askMoreDialog

askMoreDialog(supportFragmentManager) {
    mTitle = "标题"
    mMessage = "摘要vv摘要摘要摘要摘要摘要摘要vv摘要摘要摘要摘要摘要"
    mColor = Color.RED
    sureClick(key = "第一个") {
        Toast.makeText(this@MainActivity, "第一个", Toast.LENGTH_SHORT).show()
    }
    cancelClick(key = "第二个") {
        Toast.makeText(this@MainActivity, "第二个", Toast.LENGTH_SHORT).show()
    }
    button3Clicks(key = "第三个", color = Color.GRAY) {
        Toast.makeText(this@MainActivity, "第三个", Toast.LENGTH_SHORT).show()
    }
}

editDialog

editDialog(supportFragmentManager) {
    rightClick {
        Toast.makeText(this@MainActivity, it, Toast.LENGTH_SHORT).show()
    }
}

listDialog

fun list(view: View) {
	lateinit var dialog: ListDialog
	val click: (View, Int) -> Unit = { v, position ->
	    dialog.dismiss()
	    Toast.makeText(this@MainActivity, (v.tag as String), Toast.LENGTH_SHORT).show()
	}
	val longClick: (View, Int) -> Unit = { v, position ->
	//            dialog.dismiss()
	    Toast.makeText(this@MainActivity, "longClick" + (v.tag as String), Toast.LENGTH_SHORT).show()
	}
	dialog = listDialog {
	    listSetting(click, longClick) {
	        add("第一头条")
	        add("第二头条")
	        add("_(:з」∠)_")
	    }
	}
	dialog.show(supportFragmentManager, "dialog")
}

### customDialog 待续...

fancydialog's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

Forkers

zoujiacai

fancydialog's Issues

不保留活动问题

因为此种通过高阶函数来配置dialogFragment中的变量会存在一个问题,fragment在回收又restore的时候会取intent中的数据,但是通过apply来动态改变其中的变量,不会保存在intent中,再恢复的时候intent中没有值,就会导致无法恢复。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.