diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..603b140
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,14 @@
+*.iml
+.gradle
+/local.properties
+/.idea/caches
+/.idea/libraries
+/.idea/modules.xml
+/.idea/workspace.xml
+/.idea/navEditor.xml
+/.idea/assetWizardSettings.xml
+.DS_Store
+/build
+/captures
+.externalNativeBuild
+.cxx
diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml
new file mode 100644
index 0000000..88ea3aa
--- /dev/null
+++ b/.idea/codeStyles/Project.xml
@@ -0,0 +1,122 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ xmlns:android
+
+ ^$
+
+
+
+
+
+
+
+
+ xmlns:.*
+
+ ^$
+
+
+ BY_NAME
+
+
+
+
+
+
+ .*:id
+
+ http://schemas.android.com/apk/res/android
+
+
+
+
+
+
+
+
+ .*:name
+
+ http://schemas.android.com/apk/res/android
+
+
+
+
+
+
+
+
+ name
+
+ ^$
+
+
+
+
+
+
+
+
+ style
+
+ ^$
+
+
+
+
+
+
+
+
+ .*
+
+ ^$
+
+
+ BY_NAME
+
+
+
+
+
+
+ .*
+
+ http://schemas.android.com/apk/res/android
+
+
+ ANDROID_ATTRIBUTE_ORDER
+
+
+
+
+
+
+ .*
+
+ .*
+
+
+ BY_NAME
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/codeStyles/codeStyleConfig.xml b/.idea/codeStyles/codeStyleConfig.xml
new file mode 100644
index 0000000..79ee123
--- /dev/null
+++ b/.idea/codeStyles/codeStyleConfig.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/gradle.xml b/.idea/gradle.xml
new file mode 100644
index 0000000..e702375
--- /dev/null
+++ b/.idea/gradle.xml
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
new file mode 100644
index 0000000..7bfef59
--- /dev/null
+++ b/.idea/misc.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/runConfigurations.xml b/.idea/runConfigurations.xml
new file mode 100644
index 0000000..7f68460
--- /dev/null
+++ b/.idea/runConfigurations.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000..94a25f7
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/.gitignore b/app/.gitignore
new file mode 100644
index 0000000..796b96d
--- /dev/null
+++ b/app/.gitignore
@@ -0,0 +1 @@
+/build
diff --git a/app/build.gradle b/app/build.gradle
new file mode 100644
index 0000000..6d5c74d
--- /dev/null
+++ b/app/build.gradle
@@ -0,0 +1,41 @@
+apply plugin: 'com.android.application'
+apply plugin: 'kotlin-android'
+apply plugin: 'kotlin-android-extensions'
+
+android {
+ compileSdkVersion 29
+ buildToolsVersion "29.0.2"
+
+ defaultConfig {
+ applicationId "com.allens.dialog"
+ minSdkVersion 21
+ targetSdkVersion 29
+ versionCode 1
+ versionName "1.0"
+
+ testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
+ }
+
+ buildTypes {
+ release {
+ minifyEnabled false
+ proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
+ }
+ }
+
+}
+
+dependencies {
+ implementation fileTree(dir: 'libs', include: ['*.jar'])
+ implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
+ implementation 'androidx.appcompat:appcompat:1.1.0'
+ implementation 'androidx.core:core-ktx:1.2.0'
+ implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
+ testImplementation 'junit:junit:4.12'
+ androidTestImplementation 'androidx.test.ext:junit:1.1.1'
+ androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
+
+
+
+ implementation project(":lib_dialog")
+}
diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro
new file mode 100644
index 0000000..f1b4245
--- /dev/null
+++ b/app/proguard-rules.pro
@@ -0,0 +1,21 @@
+# Add project specific ProGuard rules here.
+# You can control the set of applied configuration files using the
+# proguardFiles setting in build.gradle.
+#
+# For more details, see
+# http://developer.android.com/guide/developing/tools/proguard.html
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+# public *;
+#}
+
+# Uncomment this to preserve the line number information for
+# debugging stack traces.
+#-keepattributes SourceFile,LineNumberTable
+
+# If you keep the line number information, uncomment this to
+# hide the original source file name.
+#-renamesourcefileattribute SourceFile
diff --git a/app/src/androidTest/java/com/allens/dialog/ExampleInstrumentedTest.kt b/app/src/androidTest/java/com/allens/dialog/ExampleInstrumentedTest.kt
new file mode 100644
index 0000000..f85d4f5
--- /dev/null
+++ b/app/src/androidTest/java/com/allens/dialog/ExampleInstrumentedTest.kt
@@ -0,0 +1,24 @@
+package com.allens.dialog
+
+import androidx.test.platform.app.InstrumentationRegistry
+import androidx.test.ext.junit.runners.AndroidJUnit4
+
+import org.junit.Test
+import org.junit.runner.RunWith
+
+import org.junit.Assert.*
+
+/**
+ * Instrumented test, which will execute on an Android device.
+ *
+ * See [testing documentation](http://d.android.com/tools/testing).
+ */
+@RunWith(AndroidJUnit4::class)
+class ExampleInstrumentedTest {
+ @Test
+ fun useAppContext() {
+ // Context of the app under test.
+ val appContext = InstrumentationRegistry.getInstrumentation().targetContext
+ assertEquals("com.allens.dialog", appContext.packageName)
+ }
+}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
new file mode 100644
index 0000000..b09fb84
--- /dev/null
+++ b/app/src/main/AndroidManifest.xml
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/java/com/allens/dialog/MainActivity.kt b/app/src/main/java/com/allens/dialog/MainActivity.kt
new file mode 100644
index 0000000..a31926c
--- /dev/null
+++ b/app/src/main/java/com/allens/dialog/MainActivity.kt
@@ -0,0 +1,106 @@
+package com.allens.dialog
+
+import android.os.Bundle
+import android.view.Menu
+import android.view.MenuItem
+import android.widget.SeekBar
+import android.widget.Toast
+import androidx.appcompat.app.AppCompatActivity
+import androidx.appcompat.app.AppCompatDelegate
+import dialog.OnSheetItemClickListener
+import dialog.SheetDialog
+import kotlinx.android.synthetic.main.activity_main.*
+
+class MainActivity : AppCompatActivity() {
+
+ private var with = 0.9
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ setContentView(R.layout.activity_main)
+
+
+
+
+ mSeekBar.setOnSeekBarChangeListener(object : SeekBar.OnSeekBarChangeListener {
+ override fun onProgressChanged(seekBar: SeekBar?, progress: Int, fromUser: Boolean) {
+ if (fromUser) {
+ with = ((progress.toDouble() / 10))
+ }
+
+ }
+
+ override fun onStartTrackingTouch(seekBar: SeekBar?) {
+ }
+
+ override fun onStopTrackingTouch(seekBar: SeekBar?) {
+ }
+ })
+
+// override fun onClick(v: View) {
+// when(v.id){
+// R.id.btnLight ->{
+// setDefaultNightMode(MODE_NIGHT_NO)
+// }
+// R.id.btnDark ->{
+// setDefaultNightMode(MODE_NIGHT_YES)
+// }
+// R.id.btnDefault ->{
+// setDefaultNightMode(MODE_NIGHT_FOLLOW_SYSTEM)
+// }
+// }
+// }
+
+
+ btn_switch.setOnClickListener {
+ SheetDialog(this)
+ .setDialogWidth(with) //宽度比例 这个方法要放在create 之前 才有限
+ .create()
+ .setTitle("请选择") //title 提示
+// .setTitleColor(Color.RED) //title 颜色
+// .setCancelTvColor(Color.RED)//设置cancel 颜色
+// .setCancelTvMsg("取消") //设置cancel 文案
+// .setCancelTvSize(16f)//设置cancel 字体大小
+ .addSheetItem("照片", object : OnSheetItemClickListener() {
+ override fun onSheetItemClick() {
+ Toast.makeText(this@MainActivity, "照片", Toast.LENGTH_SHORT).show()
+ }
+ })
+ .addSheetItem("拍照", object : OnSheetItemClickListener() {
+ override fun onSheetItemClick() {
+ Toast.makeText(this@MainActivity, "拍照", Toast.LENGTH_SHORT).show()
+ }
+ })
+// .setCancelTvMsg("取消")
+// .setCanceledOnTouchOutside(true) //点击其他位置是否能够取消
+// .setCancelable(true) //是否点击返回能够取消
+ .show()
+ }
+ }
+
+ override fun onCreateOptionsMenu(menu: Menu?): Boolean {
+ if (menu == null)
+ return false
+ menu.add(1, 1, 1, "暗色模式")
+ menu.add(1, 2, 2, "日间模式")
+ menu.add(1, 3, 2, "系统")
+ return true
+ }
+
+ override fun onOptionsItemSelected(item: MenuItem): Boolean {
+ when (item.itemId) {
+ 1 -> {
+ AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES)
+ }
+ 2 -> {
+ AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO)
+ }
+ 3 -> {
+ AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM)
+ }
+
+ }
+ return super.onOptionsItemSelected(item)
+ }
+
+}
diff --git a/app/src/main/res/drawable-v24/ic_launcher_foreground.xml b/app/src/main/res/drawable-v24/ic_launcher_foreground.xml
new file mode 100644
index 0000000..2b068d1
--- /dev/null
+++ b/app/src/main/res/drawable-v24/ic_launcher_foreground.xml
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_launcher_background.xml b/app/src/main/res/drawable/ic_launcher_background.xml
new file mode 100644
index 0000000..07d5da9
--- /dev/null
+++ b/app/src/main/res/drawable/ic_launcher_background.xml
@@ -0,0 +1,170 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
new file mode 100644
index 0000000..7599ae1
--- /dev/null
+++ b/app/src/main/res/layout/activity_main.xml
@@ -0,0 +1,44 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
new file mode 100644
index 0000000..eca70cf
--- /dev/null
+++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
new file mode 100644
index 0000000..eca70cf
--- /dev/null
+++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher.png b/app/src/main/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 0000000..a571e60
Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_round.png b/app/src/main/res/mipmap-hdpi/ic_launcher_round.png
new file mode 100644
index 0000000..61da551
Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/ic_launcher_round.png differ
diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher.png b/app/src/main/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 0000000..c41dd28
Binary files /dev/null and b/app/src/main/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher_round.png b/app/src/main/res/mipmap-mdpi/ic_launcher_round.png
new file mode 100644
index 0000000..db5080a
Binary files /dev/null and b/app/src/main/res/mipmap-mdpi/ic_launcher_round.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/app/src/main/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 0000000..6dba46d
Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png
new file mode 100644
index 0000000..da31a87
Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 0000000..15ac681
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
new file mode 100644
index 0000000..b216f2d
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 0000000..f25a419
Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
new file mode 100644
index 0000000..e96783c
Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png differ
diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml
new file mode 100644
index 0000000..030098f
--- /dev/null
+++ b/app/src/main/res/values/colors.xml
@@ -0,0 +1,6 @@
+
+
+ #6200EE
+ #3700B3
+ #03DAC5
+
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
new file mode 100644
index 0000000..2930b74
--- /dev/null
+++ b/app/src/main/res/values/strings.xml
@@ -0,0 +1,3 @@
+
+ dialog
+
diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml
new file mode 100644
index 0000000..3d8448c
--- /dev/null
+++ b/app/src/main/res/values/styles.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
diff --git a/app/src/test/java/com/allens/dialog/ExampleUnitTest.kt b/app/src/test/java/com/allens/dialog/ExampleUnitTest.kt
new file mode 100644
index 0000000..83a572b
--- /dev/null
+++ b/app/src/test/java/com/allens/dialog/ExampleUnitTest.kt
@@ -0,0 +1,17 @@
+package com.allens.dialog
+
+import org.junit.Test
+
+import org.junit.Assert.*
+
+/**
+ * Example local unit test, which will execute on the development machine (host).
+ *
+ * See [testing documentation](http://d.android.com/tools/testing).
+ */
+class ExampleUnitTest {
+ @Test
+ fun addition_isCorrect() {
+ assertEquals(4, 2 + 2)
+ }
+}
diff --git a/build.gradle b/build.gradle
new file mode 100644
index 0000000..84b783e
--- /dev/null
+++ b/build.gradle
@@ -0,0 +1,29 @@
+// Top-level build file where you can add configuration options common to all sub-projects/modules.
+
+buildscript {
+ ext.kotlin_version = '1.3.72'
+ repositories {
+ google()
+ jcenter()
+
+ }
+ dependencies {
+ classpath 'com.android.tools.build:gradle:3.6.3'
+ classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
+
+ // NOTE: Do not place your application dependencies here; they belong
+ // in the individual module build.gradle files
+ }
+}
+
+allprojects {
+ repositories {
+ google()
+ jcenter()
+
+ }
+}
+
+task clean(type: Delete) {
+ delete rootProject.buildDir
+}
diff --git a/config_compile.gradle b/config_compile.gradle
new file mode 100644
index 0000000..7cb7a2e
--- /dev/null
+++ b/config_compile.gradle
@@ -0,0 +1,150 @@
+apply plugin: 'kotlin-kapt'
+ext {
+ android {
+ //编译的SDK版本
+ compileSdkVersion 29
+ //编译的Tools版本
+ buildToolsVersion "29.0.2"
+
+ //==========================================================================================
+ // 默认配置
+ //==========================================================================================
+ defaultConfig {
+ //支持的最低版本
+ minSdkVersion 21
+ //支持的目标版本
+ targetSdkVersion 29
+ //版本号
+ versionCode 1
+ //版本名称
+ versionName "1.0"
+
+ testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
+
+
+ //开启 Dex 分包
+ multiDexEnabled true
+
+ }
+ //==========================================================================================
+ // other configuration (buildTypes, defaultConfig, etc.)
+ // 在该packagingOptions块内添加该块,android以将原子函数模块从包中排除,并防止出现警告。
+ //==========================================================================================
+ packagingOptions {
+ exclude 'META-INF/atomicfu.kotlin_module'
+ }
+
+ //==========================================================================================
+ // 启用 DataBinding
+ //==========================================================================================
+ dataBinding {
+ enabled = true
+ }
+
+ //==========================================================================================
+ // 启用 viewBinding
+ //==========================================================================================
+ viewBinding {
+ enabled = true
+ }
+
+ //==========================================================================================
+ // 出现错误不终止编译
+ //==========================================================================================
+ lintOptions {
+ abortOnError false
+ }
+
+ //==========================================================================================
+ // 使用 httpclient (7.0之前使用的网络请求非HttpURLClient)
+ //==========================================================================================
+ useLibrary 'org.apache.http.legacy'
+
+
+ //==========================================================================================
+ // 支持java 8
+ //==========================================================================================
+ compileOptions {
+ sourceCompatibility JavaVersion.VERSION_1_8
+ targetCompatibility JavaVersion.VERSION_1_8
+ }
+
+ //==========================================================================================
+ // Cannot inline bytecode built with JVM target 1.8
+ // into bytecode that is being built with JVM target 1.6
+ //==========================================================================================
+ kotlinOptions {
+ jvmTarget = "1.8"
+ }
+
+
+ //==============================================================================================
+ // dex 配置
+ //==============================================================================================
+ dexOptions {
+ jumboMode true
+ dexInProcess true
+ //是否预索引库。这可以改善增量构建,但是干净的构建可能会更慢。
+ preDexLibraries true
+ //指定-Xmx调用dx时的值。示例值为"2048m"。
+ javaMaxHeapSize "4g"
+ //可用于dex的最大并发进程数。默认为4
+ maxProcessCount 6
+ //运行dx时要使用的线程数。默认为4
+ threadCount 4
+ //将所有带有运行时注释的类保留在旧版multidex中的主dex中。
+ keepRuntimeAnnotatedClasses false
+ }
+
+
+ //==========================================================================================
+ // 源文件路径设置
+ //==========================================================================================
+ sourceSets {
+ main {
+ //java 代码路径
+ java.srcDirs = [
+ 'src/main/java', //Java
+ 'src/main/kotlin' //Kotlin
+ ]
+
+
+ //资源路径 当需要将layout 进行分包时候可以进行配置 eg 'src/main/res/layout/activity',
+ res.srcDirs =
+ [
+ 'src/main/res'
+ ]
+
+ //jni 路径
+ jniLibs.srcDirs = [
+ 'libs',
+ 'jniLibs'
+ ]
+ }
+ }
+
+
+ //==========================================================================================
+ // 当引入的其他model下的jar 或者 aar 时候 需要配置
+ // eg: '../component_audio_conversion/libs',
+ //==========================================================================================
+ //使用libs 下面的依赖
+ repositories {
+ flatDir {
+ dirs 'libs'
+ }
+ }
+
+
+ //==========================================================================================
+ // lib 模块是否开启自定义的混淆
+ //==========================================================================================
+ buildTypes {
+ release {
+ minifyEnabled true
+ proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
+ }
+ }
+
+ }
+}
\ No newline at end of file
diff --git a/gradle.properties b/gradle.properties
new file mode 100644
index 0000000..23339e0
--- /dev/null
+++ b/gradle.properties
@@ -0,0 +1,21 @@
+# Project-wide Gradle settings.
+# IDE (e.g. Android Studio) users:
+# Gradle settings configured through the IDE *will override*
+# any settings specified in this file.
+# For more details on how to configure your build environment visit
+# http://www.gradle.org/docs/current/userguide/build_environment.html
+# Specifies the JVM arguments used for the daemon process.
+# The setting is particularly useful for tweaking memory settings.
+org.gradle.jvmargs=-Xmx1536m
+# When configured, Gradle will run in incubating parallel mode.
+# This option should only be used with decoupled projects. More details, visit
+# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
+# org.gradle.parallel=true
+# AndroidX package structure to make it clearer which packages are bundled with the
+# Android operating system, and which are packaged with your app's APK
+# https://developer.android.com/topic/libraries/support-library/androidx-rn
+android.useAndroidX=true
+# Automatically convert third-party libraries to use AndroidX
+android.enableJetifier=true
+# Kotlin code style for this project: "official" or "obsolete":
+kotlin.code.style=official
diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar
new file mode 100644
index 0000000..f6b961f
Binary files /dev/null and b/gradle/wrapper/gradle-wrapper.jar differ
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
new file mode 100644
index 0000000..4552a44
--- /dev/null
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -0,0 +1,6 @@
+#Tue May 19 19:41:10 CST 2020
+distributionBase=GRADLE_USER_HOME
+distributionPath=wrapper/dists
+zipStoreBase=GRADLE_USER_HOME
+zipStorePath=wrapper/dists
+distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.4-all.zip
diff --git a/gradlew b/gradlew
new file mode 100755
index 0000000..cccdd3d
--- /dev/null
+++ b/gradlew
@@ -0,0 +1,172 @@
+#!/usr/bin/env sh
+
+##############################################################################
+##
+## Gradle start up script for UN*X
+##
+##############################################################################
+
+# Attempt to set APP_HOME
+# Resolve links: $0 may be a link
+PRG="$0"
+# Need this for relative symlinks.
+while [ -h "$PRG" ] ; do
+ ls=`ls -ld "$PRG"`
+ link=`expr "$ls" : '.*-> \(.*\)$'`
+ if expr "$link" : '/.*' > /dev/null; then
+ PRG="$link"
+ else
+ PRG=`dirname "$PRG"`"/$link"
+ fi
+done
+SAVED="`pwd`"
+cd "`dirname \"$PRG\"`/" >/dev/null
+APP_HOME="`pwd -P`"
+cd "$SAVED" >/dev/null
+
+APP_NAME="Gradle"
+APP_BASE_NAME=`basename "$0"`
+
+# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+DEFAULT_JVM_OPTS=""
+
+# Use the maximum available, or set MAX_FD != -1 to use that value.
+MAX_FD="maximum"
+
+warn () {
+ echo "$*"
+}
+
+die () {
+ echo
+ echo "$*"
+ echo
+ exit 1
+}
+
+# OS specific support (must be 'true' or 'false').
+cygwin=false
+msys=false
+darwin=false
+nonstop=false
+case "`uname`" in
+ CYGWIN* )
+ cygwin=true
+ ;;
+ Darwin* )
+ darwin=true
+ ;;
+ MINGW* )
+ msys=true
+ ;;
+ NONSTOP* )
+ nonstop=true
+ ;;
+esac
+
+CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
+
+# Determine the Java command to use to start the JVM.
+if [ -n "$JAVA_HOME" ] ; then
+ if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
+ # IBM's JDK on AIX uses strange locations for the executables
+ JAVACMD="$JAVA_HOME/jre/sh/java"
+ else
+ JAVACMD="$JAVA_HOME/bin/java"
+ fi
+ if [ ! -x "$JAVACMD" ] ; then
+ die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+ fi
+else
+ JAVACMD="java"
+ which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+fi
+
+# Increase the maximum file descriptors if we can.
+if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
+ MAX_FD_LIMIT=`ulimit -H -n`
+ if [ $? -eq 0 ] ; then
+ if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
+ MAX_FD="$MAX_FD_LIMIT"
+ fi
+ ulimit -n $MAX_FD
+ if [ $? -ne 0 ] ; then
+ warn "Could not set maximum file descriptor limit: $MAX_FD"
+ fi
+ else
+ warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
+ fi
+fi
+
+# For Darwin, add options to specify how the application appears in the dock
+if $darwin; then
+ GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
+fi
+
+# For Cygwin, switch paths to Windows format before running java
+if $cygwin ; then
+ APP_HOME=`cygpath --path --mixed "$APP_HOME"`
+ CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
+ JAVACMD=`cygpath --unix "$JAVACMD"`
+
+ # We build the pattern for arguments to be converted via cygpath
+ ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
+ SEP=""
+ for dir in $ROOTDIRSRAW ; do
+ ROOTDIRS="$ROOTDIRS$SEP$dir"
+ SEP="|"
+ done
+ OURCYGPATTERN="(^($ROOTDIRS))"
+ # Add a user-defined pattern to the cygpath arguments
+ if [ "$GRADLE_CYGPATTERN" != "" ] ; then
+ OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
+ fi
+ # Now convert the arguments - kludge to limit ourselves to /bin/sh
+ i=0
+ for arg in "$@" ; do
+ CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
+ CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
+
+ if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
+ eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
+ else
+ eval `echo args$i`="\"$arg\""
+ fi
+ i=$((i+1))
+ done
+ case $i in
+ (0) set -- ;;
+ (1) set -- "$args0" ;;
+ (2) set -- "$args0" "$args1" ;;
+ (3) set -- "$args0" "$args1" "$args2" ;;
+ (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
+ (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
+ (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
+ (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
+ (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
+ (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
+ esac
+fi
+
+# Escape application args
+save () {
+ for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
+ echo " "
+}
+APP_ARGS=$(save "$@")
+
+# Collect all arguments for the java command, following the shell quoting and substitution rules
+eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
+
+# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong
+if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then
+ cd "$(dirname "$0")"
+fi
+
+exec "$JAVACMD" "$@"
diff --git a/gradlew.bat b/gradlew.bat
new file mode 100644
index 0000000..f955316
--- /dev/null
+++ b/gradlew.bat
@@ -0,0 +1,84 @@
+@if "%DEBUG%" == "" @echo off
+@rem ##########################################################################
+@rem
+@rem Gradle startup script for Windows
+@rem
+@rem ##########################################################################
+
+@rem Set local scope for the variables with windows NT shell
+if "%OS%"=="Windows_NT" setlocal
+
+set DIRNAME=%~dp0
+if "%DIRNAME%" == "" set DIRNAME=.
+set APP_BASE_NAME=%~n0
+set APP_HOME=%DIRNAME%
+
+@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+set DEFAULT_JVM_OPTS=
+
+@rem Find java.exe
+if defined JAVA_HOME goto findJavaFromJavaHome
+
+set JAVA_EXE=java.exe
+%JAVA_EXE% -version >NUL 2>&1
+if "%ERRORLEVEL%" == "0" goto init
+
+echo.
+echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:findJavaFromJavaHome
+set JAVA_HOME=%JAVA_HOME:"=%
+set JAVA_EXE=%JAVA_HOME%/bin/java.exe
+
+if exist "%JAVA_EXE%" goto init
+
+echo.
+echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:init
+@rem Get command-line arguments, handling Windows variants
+
+if not "%OS%" == "Windows_NT" goto win9xME_args
+
+:win9xME_args
+@rem Slurp the command line arguments.
+set CMD_LINE_ARGS=
+set _SKIP=2
+
+:win9xME_args_slurp
+if "x%~1" == "x" goto execute
+
+set CMD_LINE_ARGS=%*
+
+:execute
+@rem Setup the command line
+
+set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
+
+@rem Execute Gradle
+"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
+
+:end
+@rem End local scope for the variables with windows NT shell
+if "%ERRORLEVEL%"=="0" goto mainEnd
+
+:fail
+rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
+rem the _cmd.exe /c_ return code!
+if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
+exit /b 1
+
+:mainEnd
+if "%OS%"=="Windows_NT" endlocal
+
+:omega
diff --git a/lib_dialog/.gitignore b/lib_dialog/.gitignore
new file mode 100644
index 0000000..796b96d
--- /dev/null
+++ b/lib_dialog/.gitignore
@@ -0,0 +1 @@
+/build
diff --git a/lib_dialog/build.gradle b/lib_dialog/build.gradle
new file mode 100644
index 0000000..00179e0
--- /dev/null
+++ b/lib_dialog/build.gradle
@@ -0,0 +1,10 @@
+apply plugin: 'com.android.library'
+apply plugin: 'kotlin-android'
+apply plugin: 'kotlin-android-extensions'
+
+//maven 脚本
+//apply from: 'maven.gradle'
+//编译配置
+apply from: '../config_compile.gradle'
+//是否混淆
+//apply from: '../proguard.gradle'
\ No newline at end of file
diff --git a/lib_dialog/consumer-rules.pro b/lib_dialog/consumer-rules.pro
new file mode 100644
index 0000000..f1b4245
--- /dev/null
+++ b/lib_dialog/consumer-rules.pro
@@ -0,0 +1,21 @@
+# Add project specific ProGuard rules here.
+# You can control the set of applied configuration files using the
+# proguardFiles setting in build.gradle.
+#
+# For more details, see
+# http://developer.android.com/guide/developing/tools/proguard.html
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+# public *;
+#}
+
+# Uncomment this to preserve the line number information for
+# debugging stack traces.
+#-keepattributes SourceFile,LineNumberTable
+
+# If you keep the line number information, uncomment this to
+# hide the original source file name.
+#-renamesourcefileattribute SourceFile
diff --git a/lib_dialog/maven.gradle b/lib_dialog/maven.gradle
new file mode 100644
index 0000000..4643ea7
--- /dev/null
+++ b/lib_dialog/maven.gradle
@@ -0,0 +1,39 @@
+apply plugin: 'maven'
+ext {
+ //maven仓库路径
+ GITHUB_REPO_PATH = "/Users/allens/Documents/maven/"
+ //group
+ PUBLISH_GROUP_ID = 'com.allens'
+ //包名
+ PUBLISH_ARTIFACT_ID = 'dialog'
+ //版本
+ PUBLISH_VERSION = '1.0.0'
+
+
+}
+
+uploadArchives {
+ repositories {
+ mavenDeployer {
+ //本地maven仓库地址,也可以使用远程maven仓库
+ def deployPath = file(project.GITHUB_REPO_PATH)
+ repository(url: "file://${deployPath.absolutePath}")
+ pom.project {
+ groupId project.PUBLISH_GROUP_ID
+ artifactId project.PUBLISH_ARTIFACT_ID
+ version project.PUBLISH_VERSION
+ }
+ }
+ }
+}
+
+
+// 源代码一起打包
+task androidSourcesJar(type: Jar) {
+ classifier = 'sources'
+ from android.sourceSets.main.java.sourceFiles
+}
+
+artifacts {
+ archives androidSourcesJar
+}
\ No newline at end of file
diff --git a/lib_dialog/proguard-rules.pro b/lib_dialog/proguard-rules.pro
new file mode 100644
index 0000000..e69de29
diff --git a/lib_dialog/src/main/AndroidManifest.xml b/lib_dialog/src/main/AndroidManifest.xml
new file mode 100644
index 0000000..608170a
--- /dev/null
+++ b/lib_dialog/src/main/AndroidManifest.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
diff --git a/lib_dialog/src/main/kotlin/dialog/BaseDialog.kt b/lib_dialog/src/main/kotlin/dialog/BaseDialog.kt
new file mode 100644
index 0000000..3e26317
--- /dev/null
+++ b/lib_dialog/src/main/kotlin/dialog/BaseDialog.kt
@@ -0,0 +1,112 @@
+package dialog
+
+import android.app.Dialog
+import android.content.Context
+import android.view.*
+import android.widget.FrameLayout
+import android.widget.LinearLayout
+import com.allens.lib_ios_dialog.R
+
+abstract class BaseDialog(private val context: Context) {
+ private var windowManager = context.getSystemService(Context.WINDOW_SERVICE) as WindowManager
+ var display: Display = windowManager.defaultDisplay
+
+ lateinit var dialog: Dialog
+
+
+ open fun create(): BaseDialog {
+ val view = LayoutInflater.from(context).inflate(getLayoutId(), null)
+ dialog = Dialog(context, getDialogStyle())
+ onBaseDialog(dialog)
+ dialog.setContentView(view)
+
+
+ val params = FrameLayout.LayoutParams(
+ if (getInflateWidthContent()) {
+ LinearLayout.LayoutParams.WRAP_CONTENT
+ } else {
+ (display.width * getDialogWidth()).toInt()
+ },
+ if (getInflateHeightFull()) {
+ display.height
+ } else {
+ LinearLayout.LayoutParams.WRAP_CONTENT
+ }
+ )
+ view?.layoutParams = params
+
+ if (getDialogFromBottom()) {
+ val window = dialog.window
+ window?.setGravity(Gravity.BOTTOM)
+ val layoutParams = window?.attributes
+ layoutParams?.x = 0
+ layoutParams?.y = 0
+ window?.attributes = layoutParams
+ }
+
+ onLayoutView(view)
+ return this
+ }
+
+ //加载布局
+ abstract fun getLayoutId(): Int
+
+ //传递view
+ abstract fun onLayoutView(view: View)
+
+ //dialog 样式
+ open fun getDialogStyle(): Int {
+ return R.style.AlertDialogStyle
+ }
+
+ //返回dialog
+ open fun onBaseDialog(dialog: Dialog) {
+
+ }
+
+ //是否撑满高度
+ open fun getInflateHeightFull(): Boolean {
+ return false
+ }
+
+ //是否自适应宽度
+ open fun getInflateWidthContent(): Boolean {
+ return false
+ }
+
+ // dialog 宽度 * 屏幕宽度 max 1.0
+ open fun getDialogWidth(): Double {
+ return 0.8
+ }
+
+ //dialog 是否从底部弹出
+ open fun getDialogFromBottom(): Boolean {
+ return false
+ }
+
+ //点击其他位置是否能够取消
+ open fun setCanceledOnTouchOutside(cancel: Boolean): BaseDialog {
+ dialog.setCanceledOnTouchOutside(cancel)
+ return this
+ }
+
+
+ // 是否点击返回能够取消
+ open fun setCancelable(cancel: Boolean): BaseDialog {
+ dialog.setCancelable(cancel)
+ return this
+ }
+
+ open fun show() {
+ dialog.show()
+ }
+
+ open fun dismiss() {
+ if (dialog.isShowing)
+ dialog.dismiss()
+ }
+
+ open fun isShowing(): Boolean {
+ return dialog.isShowing
+ }
+}
\ No newline at end of file
diff --git a/lib_dialog/src/main/kotlin/dialog/BottomDialog.kt b/lib_dialog/src/main/kotlin/dialog/BottomDialog.kt
new file mode 100644
index 0000000..6261b13
--- /dev/null
+++ b/lib_dialog/src/main/kotlin/dialog/BottomDialog.kt
@@ -0,0 +1,21 @@
+package dialog
+
+import android.app.Dialog
+import android.content.Context
+import android.view.Gravity
+import android.view.LayoutInflater
+import android.view.View
+import android.view.WindowManager
+import com.allens.lib_ios_dialog.R
+
+
+abstract class BottomDialog(context: Context) : BaseDialog(context) {
+
+ override fun getDialogStyle(): Int {
+ return R.style.ActionSheetDialogStyle
+ }
+
+ override fun getDialogFromBottom(): Boolean {
+ return true
+ }
+}
\ No newline at end of file
diff --git a/lib_dialog/src/main/kotlin/dialog/LoadIngDialog.kt b/lib_dialog/src/main/kotlin/dialog/LoadIngDialog.kt
new file mode 100644
index 0000000..202edac
--- /dev/null
+++ b/lib_dialog/src/main/kotlin/dialog/LoadIngDialog.kt
@@ -0,0 +1,42 @@
+package dialog
+
+import android.content.Context
+import android.view.View
+import android.widget.LinearLayout
+import com.allens.lib_ios_dialog.R
+import kotlinx.android.synthetic.main.dialog_loading.view.*
+
+/**
+
+ * @Author allens
+ * @Date 2019-12-19-21:02
+ * @Email 18856907654@163.com
+ */
+class LoadIngDialog constructor(context: Context) :
+ BaseDialog(context = context) {
+
+ override fun getLayoutId(): Int {
+ return R.layout.dialog_loading
+ }
+
+ override fun onLayoutView(view: View) {
+
+ }
+
+
+ override fun create(): LoadIngDialog {
+ super.create()
+ return this
+ }
+
+ override fun show() {
+ dialog.setCancelable(false)
+ dialog.setCanceledOnTouchOutside(false)
+ super.show()
+ }
+
+ override fun getInflateWidthContent(): Boolean {
+ return true
+ }
+
+}
\ No newline at end of file
diff --git a/lib_dialog/src/main/kotlin/dialog/SheetDialog.kt b/lib_dialog/src/main/kotlin/dialog/SheetDialog.kt
new file mode 100644
index 0000000..92b582a
--- /dev/null
+++ b/lib_dialog/src/main/kotlin/dialog/SheetDialog.kt
@@ -0,0 +1,386 @@
+package dialog
+
+import android.annotation.SuppressLint
+import android.content.Context
+import android.graphics.Color
+import android.os.Build
+import android.view.Gravity
+import android.view.View
+import android.widget.LinearLayout
+import android.widget.ScrollView
+import android.widget.TextView
+import com.allens.lib_ios_dialog.R
+
+class SheetDialog(private val context: Context) : BottomDialog(context = context) {
+
+
+ //cancel 的样式
+ private val bgCancel = R.drawable.bg_cancel
+
+ //当item 多个的时候 中间item的样式
+ private val bgMultipleCenter = R.drawable.bg_item_center
+
+ //当 item 只有一个的时候 item 样式
+ private val bgSingleCenter = R.drawable.bg_item_single
+
+ //当item 多个的时候 最下面的一个item 样式
+ private val bgMultipleBottom = R.drawable.bg_single
+
+ //当item 多个的时候 最上面的一个item 样式
+ private val bgMultipleTop = R.drawable.bg_top
+
+ //title 的样式
+ private val bgTitle = R.drawable.bg_top
+
+ //view
+ private lateinit var scrollView: ScrollView
+ private lateinit var linearLayout: LinearLayout
+ private lateinit var tvTitle: TextView
+ private lateinit var tvCancel: TextView
+
+
+ //单条数据的高度
+ private var itemHeight = 50
+
+ //单条数据的字体大小
+ private var itemTvSize = 12f
+
+ //宽度比例
+ private var width: Double = 0.9
+
+ //取消的字体大小
+ //是否显示设置标记
+ private var showTitle = false
+
+ //item 数据集合
+ private var itemList = mutableListOf()
+
+
+ //是否显示线
+ private var isShowLine = true
+
+ //中间线的颜色
+ private var lineColor = R.color.color_text_sprite
+
+ //线的高度
+ private var lineHeight = 1
+
+ //item 的颜色
+ private var itemColor = R.color.color_text_line
+
+
+ //最大单项数目 如果超过次数字 会有滚动效果
+ private var maxItem = 7
+
+
+ override fun getLayoutId(): Int {
+ return R.layout.view_actionsheet
+ }
+
+ override fun onLayoutView(view: View) {
+ scrollView = view.findViewById(R.id.sLayout_content)
+ linearLayout = view.findViewById(R.id.lLayout_content)
+ tvTitle = view.findViewById(R.id.txt_title)
+ tvCancel = view.findViewById(R.id.txt_cancel)
+
+ }
+
+ override fun create(): SheetDialog {
+ super.create()
+ return this
+ }
+
+
+ //==============================================================================================
+ // line
+ //==============================================================================================
+
+ fun showLine(isShowLine: Boolean): SheetDialog {
+ this.isShowLine = isShowLine
+ return this
+ }
+
+ fun setLineColor(color: Int): SheetDialog {
+ this.lineColor = color
+ return this
+ }
+
+ fun setLineHeight(height: Int): SheetDialog {
+ this.lineHeight = height
+ return this
+ }
+
+
+ //==============================================================================================
+ // title
+ //==============================================================================================
+ fun setTitle(title: String): SheetDialog {
+ showTitle = true
+ tvTitle.text = title
+ tvTitle.visibility = View.VISIBLE
+ return this
+ }
+
+ fun setTitleColor(color: Int): SheetDialog {
+ tvTitle.setTextColor(color)
+ return this
+ }
+
+
+ fun getTitleTextView(): TextView {
+ return tvTitle
+ }
+
+
+ //==============================================================================================
+ // cancel
+ //==============================================================================================
+ fun setCancelTvColor(color: Int): SheetDialog {
+ tvCancel.setTextColor(color)
+ return this
+ }
+
+ fun setCancelTvMsg(info: String): SheetDialog {
+ tvCancel.text = info
+ tvCancel.visibility = View.VISIBLE
+ return this
+ }
+
+ fun setCancelTvSize(size: Float): SheetDialog {
+ tvCancel.textSize = size
+ return this
+ }
+
+
+ fun getCancelTextView(): TextView {
+ return tvCancel
+ }
+
+
+ //==============================================================================================
+ // item
+ //==============================================================================================
+ fun setItemTvSize(itemTvSize: Float): SheetDialog {
+ this.itemTvSize = itemTvSize
+ return this
+ }
+
+ fun setItemHeight(itemHeight: Int): SheetDialog {
+ this.itemHeight = itemHeight
+ return this
+ }
+
+ //最大单项数目 如果超过次数字 会有滚动效果
+ fun setMaxItemSize(size: Int): SheetDialog {
+ this.maxItem = size
+ return this
+ }
+
+ fun setItemColor(color: Int): SheetDialog {
+ this.itemColor = color
+ return this
+ }
+
+ //==============================================================================================
+ // add
+ //==============================================================================================
+
+
+ fun addSheetItem(itemName: String): SheetDialog {
+ addSheetItem(itemName, R.color.color_text_line, null)
+ return this
+ }
+
+ fun addSheetItem(itemName: String, color: Int): SheetDialog {
+ addSheetItem(itemName, color, null)
+ return this
+ }
+
+ fun addSheetItem(itemName: String, listener: OnSheetItemClickListener?): SheetDialog {
+ addSheetItem(itemName, context.resources.getColor(R.color.color_text_line), listener)
+ return this
+ }
+
+
+ fun addSheetItem(
+ itemName: String,
+ color: Int,
+ listener: OnSheetItemClickListener?
+ ): SheetDialog {
+ itemList.add(SheetItem(itemName, color, listener))
+ return this
+ }
+
+ //==============================================================================================
+ // dialog
+ //==============================================================================================
+ //点击其他位置是否能够取消
+ override fun setCanceledOnTouchOutside(cancel: Boolean): SheetDialog {
+ dialog.setCanceledOnTouchOutside(cancel)
+ return this
+ }
+
+
+ // 是否点击返回能够取消
+ override fun setCancelable(cancel: Boolean): SheetDialog {
+ dialog.setCancelable(cancel)
+ return this
+ }
+
+ override fun getDialogWidth(): Double {
+ return width
+ }
+
+ fun setDialogWidth(width: Double): SheetDialog {
+ this.width = width
+ return this
+ }
+
+ override fun show() {
+ prepareShow()
+ super.show()
+ }
+
+ private fun prepareShow() {
+ val size: Int = itemList.size
+ //设置 滚动布局的高度为屏幕的一半
+ if (size >= maxItem) {
+ val params = scrollView.layoutParams
+ params.height = display.height / 3
+ scrollView.layoutParams = params
+ }
+
+
+ //title cancel 样式
+ tvCancel.setBackgroundResource(bgCancel)
+ tvTitle.setBackgroundResource(bgTitle)
+ tvCancel.setOnClickListener {
+ dialog.dismiss()
+ }
+
+ itemList.indices.forEach {
+
+ val index = it
+
+ //是否添加title 下面的line
+ if (isShowLine && it == 0 && showTitle) {
+ addLine()
+ }
+
+ val textView = TextView(context)
+ textView.text = itemList[index].name
+ textView.textSize = itemTvSize
+ textView.gravity = Gravity.CENTER
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
+ textView.setTextAppearance(R.style.style_water)
+ }
+
+
+
+ if (showTitle) {
+ when (index) {
+ itemList.size - 1 -> {
+ textView.setBackgroundResource(bgMultipleBottom)
+ }
+ else -> {
+ textView.setBackgroundResource(bgMultipleCenter)
+ }
+ }
+ } else {
+ when (index) {
+ 0 -> {
+ textView.setBackgroundResource(bgMultipleTop)
+ }
+ itemList.size - 1 -> {
+ textView.setBackgroundResource(bgMultipleBottom)
+ }
+ else -> {
+ textView.setBackgroundResource(bgMultipleCenter)
+ }
+ }
+ }
+
+
+ textView.layoutParams =
+ LinearLayout.LayoutParams(
+ LinearLayout.LayoutParams.MATCH_PARENT,
+ dip2px(context, itemHeight)
+ )
+ if (itemList[index].color == -1) {
+ textView.setTextColor(context.resources.getColor(itemColor))
+ } else
+ textView.setTextColor(itemList[index].color)
+
+ textView.setOnClickListener {
+ dialog.dismiss()
+ itemList[index].listener?.onSheetItemClick(index)
+ itemList[index].listener?.onSheetItemClick()
+ itemList[index].listener?.onSheetItemClick(index, textView, itemList[index].name)
+ }
+
+ linearLayout.addView(textView)
+ if (isShowLine && index < itemList.size - 1) {
+ addLine()
+ }
+ }
+ }
+
+ private fun addLine() {
+ if (!isShowLine) {
+ return
+ }
+ val line = View(context)
+ line.setBackgroundColor(context.resources.getColor(lineColor))
+ line.layoutParams =
+ LinearLayout.LayoutParams(
+ LinearLayout.LayoutParams.MATCH_PARENT,
+ dip2px(context, lineHeight)
+ )
+ linearLayout.addView(line)
+ }
+
+}
+
+
+private fun dip2px(context: Context, dpValue: Int): Int {
+ val scale = context.resources.displayMetrics.density
+ return (dpValue * scale + 0.5f).toInt()
+}
+
+
+data class SheetItem(
+ val name: String,
+ val color: Int = -1,
+ val listener: OnSheetItemClickListener?
+)
+
+
+abstract class OnSheetItemClickListener {
+
+
+ abstract fun onSheetItemClick()
+
+ fun onSheetItemClick(which: Int) {
+
+ }
+
+ fun onSheetItemClick(index: Int, textView: TextView, info: String) {
+
+ }
+
+
+}
+
+/***
+ * 默认颜色
+ */
+enum class SheetItemColor(name: String) {
+ Blue("#0088FF"),
+ Red("#C24B44");
+
+
+ fun getColor(): Int {
+ return Color.parseColor(name)
+ }
+
+}
\ No newline at end of file
diff --git a/lib_dialog/src/main/res/anim/actionsheet_dialog_in.xml b/lib_dialog/src/main/res/anim/actionsheet_dialog_in.xml
new file mode 100644
index 0000000..cfd58a9
--- /dev/null
+++ b/lib_dialog/src/main/res/anim/actionsheet_dialog_in.xml
@@ -0,0 +1,5 @@
+
+
diff --git a/lib_dialog/src/main/res/anim/actionsheet_dialog_out.xml b/lib_dialog/src/main/res/anim/actionsheet_dialog_out.xml
new file mode 100644
index 0000000..5439a7a
--- /dev/null
+++ b/lib_dialog/src/main/res/anim/actionsheet_dialog_out.xml
@@ -0,0 +1,5 @@
+
+
diff --git a/lib_dialog/src/main/res/drawable/bg_cancel.xml b/lib_dialog/src/main/res/drawable/bg_cancel.xml
new file mode 100644
index 0000000..fdd4618
--- /dev/null
+++ b/lib_dialog/src/main/res/drawable/bg_cancel.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/lib_dialog/src/main/res/drawable/bg_item_center.xml b/lib_dialog/src/main/res/drawable/bg_item_center.xml
new file mode 100644
index 0000000..8a3b726
--- /dev/null
+++ b/lib_dialog/src/main/res/drawable/bg_item_center.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/lib_dialog/src/main/res/drawable/bg_item_single.xml b/lib_dialog/src/main/res/drawable/bg_item_single.xml
new file mode 100644
index 0000000..189140c
--- /dev/null
+++ b/lib_dialog/src/main/res/drawable/bg_item_single.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/lib_dialog/src/main/res/drawable/bg_single.xml b/lib_dialog/src/main/res/drawable/bg_single.xml
new file mode 100644
index 0000000..50e143c
--- /dev/null
+++ b/lib_dialog/src/main/res/drawable/bg_single.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/lib_dialog/src/main/res/drawable/bg_top.xml b/lib_dialog/src/main/res/drawable/bg_top.xml
new file mode 100644
index 0000000..924584c
--- /dev/null
+++ b/lib_dialog/src/main/res/drawable/bg_top.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/lib_dialog/src/main/res/drawable/dialog_loading.9.png b/lib_dialog/src/main/res/drawable/dialog_loading.9.png
new file mode 100644
index 0000000..aa325e1
Binary files /dev/null and b/lib_dialog/src/main/res/drawable/dialog_loading.9.png differ
diff --git a/lib_dialog/src/main/res/drawable/dialog_loading_black.xml b/lib_dialog/src/main/res/drawable/dialog_loading_black.xml
new file mode 100644
index 0000000..fcbecda
--- /dev/null
+++ b/lib_dialog/src/main/res/drawable/dialog_loading_black.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/lib_dialog/src/main/res/drawable/dialog_loading_img.png b/lib_dialog/src/main/res/drawable/dialog_loading_img.png
new file mode 100644
index 0000000..ffb19f5
Binary files /dev/null and b/lib_dialog/src/main/res/drawable/dialog_loading_img.png differ
diff --git a/lib_dialog/src/main/res/drawable/dialog_loading_write.xml b/lib_dialog/src/main/res/drawable/dialog_loading_write.xml
new file mode 100644
index 0000000..8d8d926
--- /dev/null
+++ b/lib_dialog/src/main/res/drawable/dialog_loading_write.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/lib_dialog/src/main/res/layout/dialog_loading.xml b/lib_dialog/src/main/res/layout/dialog_loading.xml
new file mode 100644
index 0000000..71dc4e3
--- /dev/null
+++ b/lib_dialog/src/main/res/layout/dialog_loading.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/lib_dialog/src/main/res/layout/view_actionsheet.xml b/lib_dialog/src/main/res/layout/view_actionsheet.xml
new file mode 100644
index 0000000..93c0cc4
--- /dev/null
+++ b/lib_dialog/src/main/res/layout/view_actionsheet.xml
@@ -0,0 +1,54 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/lib_dialog/src/main/res/values-night/color.xml b/lib_dialog/src/main/res/values-night/color.xml
new file mode 100644
index 0000000..02ea201
--- /dev/null
+++ b/lib_dialog/src/main/res/values-night/color.xml
@@ -0,0 +1,10 @@
+
+
+
+
+ #18191A
+
+ #999FA6
+
+ #1A1B1C
+
\ No newline at end of file
diff --git a/lib_dialog/src/main/res/values/color.xml b/lib_dialog/src/main/res/values/color.xml
new file mode 100644
index 0000000..bf8e36b
--- /dev/null
+++ b/lib_dialog/src/main/res/values/color.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
+ #FFFFFF
+
+ #888888
+
+ #888888
+
\ No newline at end of file
diff --git a/lib_dialog/src/main/res/values/dimens.xml b/lib_dialog/src/main/res/values/dimens.xml
new file mode 100644
index 0000000..55c1e59
--- /dev/null
+++ b/lib_dialog/src/main/res/values/dimens.xml
@@ -0,0 +1,7 @@
+
+
+
+ 16dp
+ 16dp
+
+
diff --git a/lib_dialog/src/main/res/values/strings.xml b/lib_dialog/src/main/res/values/strings.xml
new file mode 100644
index 0000000..1837c7e
--- /dev/null
+++ b/lib_dialog/src/main/res/values/strings.xml
@@ -0,0 +1,6 @@
+
+
+
+ 取消
+
+
diff --git a/lib_dialog/src/main/res/values/styles.xml b/lib_dialog/src/main/res/values/styles.xml
new file mode 100644
index 0000000..19879f2
--- /dev/null
+++ b/lib_dialog/src/main/res/values/styles.xml
@@ -0,0 +1,49 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/lib_dialog/src/test/java/com/allens/lib_ios_dialog/ExampleUnitTest.java b/lib_dialog/src/test/java/com/allens/lib_ios_dialog/ExampleUnitTest.java
new file mode 100644
index 0000000..3906697
--- /dev/null
+++ b/lib_dialog/src/test/java/com/allens/lib_ios_dialog/ExampleUnitTest.java
@@ -0,0 +1,17 @@
+package com.allens.lib_ios_dialog;
+
+import org.junit.Test;
+
+import static org.junit.Assert.*;
+
+/**
+ * Example local unit test, which will execute on the development machine (host).
+ *
+ * @see Testing documentation
+ */
+public class ExampleUnitTest {
+ @Test
+ public void addition_isCorrect() {
+ assertEquals(4, 2 + 2);
+ }
+}
\ No newline at end of file
diff --git a/settings.gradle b/settings.gradle
new file mode 100644
index 0000000..180b3c6
--- /dev/null
+++ b/settings.gradle
@@ -0,0 +1,2 @@
+rootProject.name='dialog'
+include ':app', ':lib_dialog'