diff --git a/app/build.gradle b/app/build.gradle index d819b69..8f07600 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -97,4 +97,6 @@ implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' //高德导航、定位、地图三合一 implementation 'com.amap.api:navi-3dmap:latest.integration' + //日期范围选择 + implementation project(path: ':cosmocalendar') } \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index d819b69..8f07600 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -97,4 +97,6 @@ implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' //高德导航、定位、地图三合一 implementation 'com.amap.api:navi-3dmap:latest.integration' + //日期范围选择 + implementation project(path: ':cosmocalendar') } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/ktd/extensions/Calendar.kt b/app/src/main/java/com/casic/br/ktd/extensions/Calendar.kt new file mode 100644 index 0000000..edd5edc --- /dev/null +++ b/app/src/main/java/com/casic/br/ktd/extensions/Calendar.kt @@ -0,0 +1,9 @@ +package com.casic.br.ktd.extensions + +import java.text.SimpleDateFormat +import java.util.* + +fun Calendar.formatDate(): String { + val dateFormat = SimpleDateFormat("yyyy-MM-dd", Locale.CHINA) + return dateFormat.format(this.time) +} \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index d819b69..8f07600 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -97,4 +97,6 @@ implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' //高德导航、定位、地图三合一 implementation 'com.amap.api:navi-3dmap:latest.integration' + //日期范围选择 + implementation project(path: ':cosmocalendar') } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/ktd/extensions/Calendar.kt b/app/src/main/java/com/casic/br/ktd/extensions/Calendar.kt new file mode 100644 index 0000000..edd5edc --- /dev/null +++ b/app/src/main/java/com/casic/br/ktd/extensions/Calendar.kt @@ -0,0 +1,9 @@ +package com.casic.br.ktd.extensions + +import java.text.SimpleDateFormat +import java.util.* + +fun Calendar.formatDate(): String { + val dateFormat = SimpleDateFormat("yyyy-MM-dd", Locale.CHINA) + return dateFormat.format(this.time) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/ktd/extensions/Dialog.kt b/app/src/main/java/com/casic/br/ktd/extensions/Dialog.kt new file mode 100644 index 0000000..645d414 --- /dev/null +++ b/app/src/main/java/com/casic/br/ktd/extensions/Dialog.kt @@ -0,0 +1,21 @@ +package com.casic.br.ktd.extensions + +import android.app.Dialog +import android.graphics.Color +import android.graphics.drawable.ColorDrawable +import android.view.WindowManager +import androidx.annotation.StyleRes +import com.pengxh.kt.lite.extensions.getScreenWidth + +fun Dialog.resetParams(gravity: Int, @StyleRes resId: Int, ratio: Double) { + val window = this.window ?: return + window.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT)) + window.decorView.setBackgroundColor(Color.TRANSPARENT) + window.setGravity(gravity) + //设置Dialog出现的动画 + window.setWindowAnimations(resId) + val params = window.attributes + params.width = ((this.context.getScreenWidth() * ratio).toInt()) + params.height = WindowManager.LayoutParams.MATCH_PARENT + window.attributes = params +} \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index d819b69..8f07600 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -97,4 +97,6 @@ implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' //高德导航、定位、地图三合一 implementation 'com.amap.api:navi-3dmap:latest.integration' + //日期范围选择 + implementation project(path: ':cosmocalendar') } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/ktd/extensions/Calendar.kt b/app/src/main/java/com/casic/br/ktd/extensions/Calendar.kt new file mode 100644 index 0000000..edd5edc --- /dev/null +++ b/app/src/main/java/com/casic/br/ktd/extensions/Calendar.kt @@ -0,0 +1,9 @@ +package com.casic.br.ktd.extensions + +import java.text.SimpleDateFormat +import java.util.* + +fun Calendar.formatDate(): String { + val dateFormat = SimpleDateFormat("yyyy-MM-dd", Locale.CHINA) + return dateFormat.format(this.time) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/ktd/extensions/Dialog.kt b/app/src/main/java/com/casic/br/ktd/extensions/Dialog.kt new file mode 100644 index 0000000..645d414 --- /dev/null +++ b/app/src/main/java/com/casic/br/ktd/extensions/Dialog.kt @@ -0,0 +1,21 @@ +package com.casic.br.ktd.extensions + +import android.app.Dialog +import android.graphics.Color +import android.graphics.drawable.ColorDrawable +import android.view.WindowManager +import androidx.annotation.StyleRes +import com.pengxh.kt.lite.extensions.getScreenWidth + +fun Dialog.resetParams(gravity: Int, @StyleRes resId: Int, ratio: Double) { + val window = this.window ?: return + window.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT)) + window.decorView.setBackgroundColor(Color.TRANSPARENT) + window.setGravity(gravity) + //设置Dialog出现的动画 + window.setWindowAnimations(resId) + val params = window.attributes + params.width = ((this.context.getScreenWidth() * ratio).toInt()) + params.height = WindowManager.LayoutParams.MATCH_PARENT + window.attributes = params +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/ktd/fragment/AlarmPageFragment.kt b/app/src/main/java/com/casic/br/ktd/fragment/AlarmPageFragment.kt index b8941ed..dadedf1 100644 --- a/app/src/main/java/com/casic/br/ktd/fragment/AlarmPageFragment.kt +++ b/app/src/main/java/com/casic/br/ktd/fragment/AlarmPageFragment.kt @@ -2,7 +2,9 @@ import android.os.Bundle import com.casic.br.ktd.R +import com.casic.br.ktd.widgets.DateRangeActionSheet import com.pengxh.kt.lite.base.KotlinBaseFragment +import kotlinx.android.synthetic.main.fragment_alarm.* class AlarmPageFragment : KotlinBaseFragment() { override fun initData(savedInstanceState: Bundle?) { @@ -10,7 +12,15 @@ } override fun initEvent() { - + calendarView.setOnClickListener { + DateRangeActionSheet.Builder().setContext(requireContext()) + .setOnActionSheetListener(object : + DateRangeActionSheet.OnDateRangeSelectedListener { + override fun onDateRangeSelected(startDate: String, endDate: String) { + selectedDateView.text = "$startDate ~ $endDate" + } + }).build().show() + } } override fun initLayoutView(): Int = R.layout.fragment_alarm diff --git a/app/build.gradle b/app/build.gradle index d819b69..8f07600 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -97,4 +97,6 @@ implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' //高德导航、定位、地图三合一 implementation 'com.amap.api:navi-3dmap:latest.integration' + //日期范围选择 + implementation project(path: ':cosmocalendar') } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/ktd/extensions/Calendar.kt b/app/src/main/java/com/casic/br/ktd/extensions/Calendar.kt new file mode 100644 index 0000000..edd5edc --- /dev/null +++ b/app/src/main/java/com/casic/br/ktd/extensions/Calendar.kt @@ -0,0 +1,9 @@ +package com.casic.br.ktd.extensions + +import java.text.SimpleDateFormat +import java.util.* + +fun Calendar.formatDate(): String { + val dateFormat = SimpleDateFormat("yyyy-MM-dd", Locale.CHINA) + return dateFormat.format(this.time) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/ktd/extensions/Dialog.kt b/app/src/main/java/com/casic/br/ktd/extensions/Dialog.kt new file mode 100644 index 0000000..645d414 --- /dev/null +++ b/app/src/main/java/com/casic/br/ktd/extensions/Dialog.kt @@ -0,0 +1,21 @@ +package com.casic.br.ktd.extensions + +import android.app.Dialog +import android.graphics.Color +import android.graphics.drawable.ColorDrawable +import android.view.WindowManager +import androidx.annotation.StyleRes +import com.pengxh.kt.lite.extensions.getScreenWidth + +fun Dialog.resetParams(gravity: Int, @StyleRes resId: Int, ratio: Double) { + val window = this.window ?: return + window.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT)) + window.decorView.setBackgroundColor(Color.TRANSPARENT) + window.setGravity(gravity) + //设置Dialog出现的动画 + window.setWindowAnimations(resId) + val params = window.attributes + params.width = ((this.context.getScreenWidth() * ratio).toInt()) + params.height = WindowManager.LayoutParams.MATCH_PARENT + window.attributes = params +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/ktd/fragment/AlarmPageFragment.kt b/app/src/main/java/com/casic/br/ktd/fragment/AlarmPageFragment.kt index b8941ed..dadedf1 100644 --- a/app/src/main/java/com/casic/br/ktd/fragment/AlarmPageFragment.kt +++ b/app/src/main/java/com/casic/br/ktd/fragment/AlarmPageFragment.kt @@ -2,7 +2,9 @@ import android.os.Bundle import com.casic.br.ktd.R +import com.casic.br.ktd.widgets.DateRangeActionSheet import com.pengxh.kt.lite.base.KotlinBaseFragment +import kotlinx.android.synthetic.main.fragment_alarm.* class AlarmPageFragment : KotlinBaseFragment() { override fun initData(savedInstanceState: Bundle?) { @@ -10,7 +12,15 @@ } override fun initEvent() { - + calendarView.setOnClickListener { + DateRangeActionSheet.Builder().setContext(requireContext()) + .setOnActionSheetListener(object : + DateRangeActionSheet.OnDateRangeSelectedListener { + override fun onDateRangeSelected(startDate: String, endDate: String) { + selectedDateView.text = "$startDate ~ $endDate" + } + }).build().show() + } } override fun initLayoutView(): Int = R.layout.fragment_alarm diff --git a/app/src/main/java/com/casic/br/ktd/widgets/DateRangeActionSheet.kt b/app/src/main/java/com/casic/br/ktd/widgets/DateRangeActionSheet.kt new file mode 100644 index 0000000..4f693bf --- /dev/null +++ b/app/src/main/java/com/casic/br/ktd/widgets/DateRangeActionSheet.kt @@ -0,0 +1,62 @@ +package com.casic.br.ktd.widgets + +import android.app.Dialog +import android.content.Context +import android.os.Bundle +import android.view.Gravity +import com.casic.br.ktd.R +import com.casic.br.ktd.extensions.formatDate +import com.casic.br.ktd.extensions.resetParams +import com.pengxh.kt.lite.extensions.show +import kotlinx.android.synthetic.main.action_sheet_date_range.* + +class DateRangeActionSheet private constructor(builder: Builder) : + Dialog(builder.context, R.style.UserDefinedDialogStyle) { + + private val listener = builder.listener + + class Builder { + lateinit var context: Context + var listener: OnDateRangeSelectedListener? = null + + fun setContext(context: Context): Builder { + this.context = context + return this + } + + fun setOnActionSheetListener(listener: OnDateRangeSelectedListener?): Builder { + this.listener = listener + return this + } + + fun build(): DateRangeActionSheet { + return DateRangeActionSheet(this) + } + } + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + this.resetParams(Gravity.BOTTOM, R.style.ActionSheetDialogAnimation, 0.5) + setContentView(R.layout.action_sheet_date_range) + setCancelable(true) + setCanceledOnTouchOutside(true) + + selectedButton.setOnClickListener { + val selectedDates = calendarView.selectedDates + if (selectedDates.size == 0) { + "请选择正确的日期范围".show(context) + return@setOnClickListener + } + val startCalendar = selectedDates[0] + val endCalendar = selectedDates[selectedDates.size - 1] + + listener?.onDateRangeSelected(startCalendar.formatDate(), endCalendar.formatDate()) + + dismiss() + } + } + + interface OnDateRangeSelectedListener { + fun onDateRangeSelected(startDate: String, endDate: String) + } +} \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index d819b69..8f07600 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -97,4 +97,6 @@ implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' //高德导航、定位、地图三合一 implementation 'com.amap.api:navi-3dmap:latest.integration' + //日期范围选择 + implementation project(path: ':cosmocalendar') } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/ktd/extensions/Calendar.kt b/app/src/main/java/com/casic/br/ktd/extensions/Calendar.kt new file mode 100644 index 0000000..edd5edc --- /dev/null +++ b/app/src/main/java/com/casic/br/ktd/extensions/Calendar.kt @@ -0,0 +1,9 @@ +package com.casic.br.ktd.extensions + +import java.text.SimpleDateFormat +import java.util.* + +fun Calendar.formatDate(): String { + val dateFormat = SimpleDateFormat("yyyy-MM-dd", Locale.CHINA) + return dateFormat.format(this.time) +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/ktd/extensions/Dialog.kt b/app/src/main/java/com/casic/br/ktd/extensions/Dialog.kt new file mode 100644 index 0000000..645d414 --- /dev/null +++ b/app/src/main/java/com/casic/br/ktd/extensions/Dialog.kt @@ -0,0 +1,21 @@ +package com.casic.br.ktd.extensions + +import android.app.Dialog +import android.graphics.Color +import android.graphics.drawable.ColorDrawable +import android.view.WindowManager +import androidx.annotation.StyleRes +import com.pengxh.kt.lite.extensions.getScreenWidth + +fun Dialog.resetParams(gravity: Int, @StyleRes resId: Int, ratio: Double) { + val window = this.window ?: return + window.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT)) + window.decorView.setBackgroundColor(Color.TRANSPARENT) + window.setGravity(gravity) + //设置Dialog出现的动画 + window.setWindowAnimations(resId) + val params = window.attributes + params.width = ((this.context.getScreenWidth() * ratio).toInt()) + params.height = WindowManager.LayoutParams.MATCH_PARENT + window.attributes = params +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/ktd/fragment/AlarmPageFragment.kt b/app/src/main/java/com/casic/br/ktd/fragment/AlarmPageFragment.kt index b8941ed..dadedf1 100644 --- a/app/src/main/java/com/casic/br/ktd/fragment/AlarmPageFragment.kt +++ b/app/src/main/java/com/casic/br/ktd/fragment/AlarmPageFragment.kt @@ -2,7 +2,9 @@ import android.os.Bundle import com.casic.br.ktd.R +import com.casic.br.ktd.widgets.DateRangeActionSheet import com.pengxh.kt.lite.base.KotlinBaseFragment +import kotlinx.android.synthetic.main.fragment_alarm.* class AlarmPageFragment : KotlinBaseFragment() { override fun initData(savedInstanceState: Bundle?) { @@ -10,7 +12,15 @@ } override fun initEvent() { - + calendarView.setOnClickListener { + DateRangeActionSheet.Builder().setContext(requireContext()) + .setOnActionSheetListener(object : + DateRangeActionSheet.OnDateRangeSelectedListener { + override fun onDateRangeSelected(startDate: String, endDate: String) { + selectedDateView.text = "$startDate ~ $endDate" + } + }).build().show() + } } override fun initLayoutView(): Int = R.layout.fragment_alarm diff --git a/app/src/main/java/com/casic/br/ktd/widgets/DateRangeActionSheet.kt b/app/src/main/java/com/casic/br/ktd/widgets/DateRangeActionSheet.kt new file mode 100644 index 0000000..4f693bf --- /dev/null +++ b/app/src/main/java/com/casic/br/ktd/widgets/DateRangeActionSheet.kt @@ -0,0 +1,62 @@ +package com.casic.br.ktd.widgets + +import android.app.Dialog +import android.content.Context +import android.os.Bundle +import android.view.Gravity +import com.casic.br.ktd.R +import com.casic.br.ktd.extensions.formatDate +import com.casic.br.ktd.extensions.resetParams +import com.pengxh.kt.lite.extensions.show +import kotlinx.android.synthetic.main.action_sheet_date_range.* + +class DateRangeActionSheet private constructor(builder: Builder) : + Dialog(builder.context, R.style.UserDefinedDialogStyle) { + + private val listener = builder.listener + + class Builder { + lateinit var context: Context + var listener: OnDateRangeSelectedListener? = null + + fun setContext(context: Context): Builder { + this.context = context + return this + } + + fun setOnActionSheetListener(listener: OnDateRangeSelectedListener?): Builder { + this.listener = listener + return this + } + + fun build(): DateRangeActionSheet { + return DateRangeActionSheet(this) + } + } + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + this.resetParams(Gravity.BOTTOM, R.style.ActionSheetDialogAnimation, 0.5) + setContentView(R.layout.action_sheet_date_range) + setCancelable(true) + setCanceledOnTouchOutside(true) + + selectedButton.setOnClickListener { + val selectedDates = calendarView.selectedDates + if (selectedDates.size == 0) { + "请选择正确的日期范围".show(context) + return@setOnClickListener + } + val startCalendar = selectedDates[0] + val endCalendar = selectedDates[selectedDates.size - 1] + + listener?.onDateRangeSelected(startCalendar.formatDate(), endCalendar.formatDate()) + + dismiss() + } + } + + interface OnDateRangeSelectedListener { + fun onDateRangeSelected(startDate: String, endDate: String) + } +} \ No newline at end of file diff --git a/app/src/main/res/layout/action_sheet_date_range.xml b/app/src/main/res/layout/action_sheet_date_range.xml new file mode 100644 index 0000000..3f8a33d --- /dev/null +++ b/app/src/main/res/layout/action_sheet_date_range.xml @@ -0,0 +1,26 @@ + + + + + +