Skip to content

Commit 9a65fd7

Browse files
committed
Added Dialog support to CalendarView
1 parent ec289a4 commit 9a65fd7

File tree

10 files changed

+148
-6
lines changed

10 files changed

+148
-6
lines changed
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package com.shahzadafridi.calendarview
2+
3+
import android.app.Dialog
4+
import android.content.Context
5+
import android.graphics.Color
6+
import android.graphics.drawable.ColorDrawable
7+
import android.os.Bundle
8+
import android.view.Gravity
9+
import android.view.Window
10+
import android.view.WindowManager
11+
12+
13+
class CalendarViewDialog(context: Context): Dialog(context) {
14+
15+
override fun onCreate(savedInstanceState: Bundle?) {
16+
super.onCreate(savedInstanceState)
17+
this.requestWindowFeature(Window.FEATURE_NO_TITLE)
18+
setContentView(R.layout.dialog_layout)
19+
setUpDefaultConfig()
20+
}
21+
22+
private fun setUpDefaultConfig() {
23+
this.window!!.setGravity(Gravity.CENTER)
24+
this.window!!.setLayout(
25+
WindowManager.LayoutParams.MATCH_PARENT,
26+
WindowManager.LayoutParams.WRAP_CONTENT
27+
)
28+
this.window!!.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
29+
this.window!!.attributes.windowAnimations = R.style.AnimatedDialogStyle
30+
this.window!!.setGravity(Gravity.TOP)
31+
}
32+
33+
fun getCalendarView(): CalendarView{
34+
val calendarView = findViewById<CalendarView>(R.id.dialog_calendar_view)
35+
return calendarView
36+
}
37+
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,37 @@
11
package com.shahzadafridi.calendarview
22

3+
import android.app.Dialog
4+
import android.content.Context
35
import android.content.res.Resources
6+
import android.graphics.Color
7+
import android.graphics.drawable.ColorDrawable
8+
import android.view.Gravity
9+
import android.view.Window
10+
import android.view.WindowManager
411

512
object Util {
13+
614
//Int to DP
715
val Int.dp: Int
816
get() = (this * Resources.getSystem().displayMetrics.density + 0.5f).toInt()
17+
18+
/**
19+
* CREATE CUSTOM DIALOG
20+
*/
21+
22+
fun onCreateDialog(context: Context, layout: CalendarView, cancelable: Boolean): Dialog {
23+
val dialog = Dialog(context, android.R.style.Theme_Dialog)
24+
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE)
25+
dialog.setContentView(layout)
26+
dialog.window!!.setGravity(Gravity.CENTER)
27+
dialog.window!!.setLayout(
28+
WindowManager.LayoutParams.MATCH_PARENT,
29+
WindowManager.LayoutParams.WRAP_CONTENT
30+
)
31+
dialog.window!!.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
32+
dialog.window!!.attributes.windowAnimations = R.style.AnimatedDialogStyle
33+
dialog.window!!.setGravity(Gravity.TOP)
34+
dialog.setCancelable(cancelable)
35+
return dialog
36+
}
937
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
<set xmlns:android="http://schemas.android.com/apk/res/android">
2+
<translate
3+
android:duration="@android:integer/config_mediumAnimTime"
4+
android:fromYDelta="-100%"
5+
android:toYDelta="0%">
6+
</translate>
7+
</set>
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
<set xmlns:android="http://schemas.android.com/apk/res/android">
2+
<translate
3+
android:duration="@android:integer/config_mediumAnimTime"
4+
android:fromYDelta="0"
5+
android:toYDelta="-100%">
6+
</translate>
7+
</set>
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<com.shahzadafridi.calendarview.CalendarView
3+
xmlns:android="http://schemas.android.com/apk/res/android"
4+
android:id="@+id/dialog_calendar_view"
5+
android:layout_width="match_parent"
6+
android:layout_height="wrap_content"/>
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
<resources xmlns:tools="http://schemas.android.com/tools">
2+
3+
<style name="AnimatedDialogStyle" parent="Theme.AppCompat.Light.Dialog">
4+
<item name="android:windowEnterAnimation">@anim/dialog_slide_bottom</item>
5+
<item name="android:windowExitAnimation">@anim/dialog_slide_up</item>
6+
</style>
7+
8+
</resources>

app/src/main/java/com/shahzadafridi/sample/MainActivity.kt

Lines changed: 29 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,20 @@
11
package com.shahzadafridi.sample
22

3+
import android.app.Dialog
4+
import android.content.Context
35
import android.graphics.Color
6+
import android.graphics.drawable.ColorDrawable
47
import android.os.Bundle
58
import android.util.Log
9+
import android.view.Gravity
610
import android.view.View
11+
import android.view.Window
12+
import android.view.WindowManager
13+
import android.widget.ImageView
714
import android.widget.Toast
815
import androidx.appcompat.app.AppCompatActivity
16+
import com.shahzadafridi.calendarview.CalendarView
17+
import com.shahzadafridi.calendarview.CalendarViewDialog
918
import com.shahzadafridi.calendarview.CalenderViewInterface
1019
import com.shahzadafridi.sample.databinding.ActivityMainBinding
1120
import java.text.SimpleDateFormat
@@ -14,23 +23,36 @@ import java.util.*
1423
class MainActivity : AppCompatActivity() {
1524

1625
lateinit var binding: ActivityMainBinding
26+
var dialog: CalendarViewDialog? = null
1727

1828
override fun onCreate(savedInstanceState: Bundle?) {
1929
super.onCreate(savedInstanceState)
2030
binding = ActivityMainBinding.inflate(layoutInflater)
2131
setContentView(binding.root)
2232

23-
//Fake Event
33+
setUpCalendarView(binding.calendarView)
34+
}
35+
36+
fun showDialogCalendar(view: View) {
37+
dialog = CalendarViewDialog(this)
38+
dialog!!.setCancelable(false)
39+
dialog!!.show()
40+
setUpCalendarView(dialog!!.getCalendarView())
41+
}
42+
43+
private fun setUpCalendarView(calendarView: CalendarView) {
44+
//Fake Events
2445
val events = HashSet<Calendar>()
25-
var c1 = Calendar.getInstance()
46+
val c1 = Calendar.getInstance()
2647
for (i in 15..20){
2748
c1.set(Calendar.DAY_OF_MONTH,i)
2849
events.add(Calendar.getInstance().apply {
2950
this.time = c1.time
3051
})
3152
}
3253

33-
binding.calendarView.builder()
54+
//Setup CalendarView.
55+
calendarView.builder()
3456
.withYearPanel("yyyy",R.color.black,42,R.font.titillium_web_semibold)
3557
.withBackButton(true,R.drawable.ic_up_round)
3658
.withMonthPanel(
@@ -58,8 +80,8 @@ class MainActivity : AppCompatActivity() {
5880
.withEvents(events, R.color.green)
5981
.buildCalendar()
6082

61-
// assign event handler
62-
binding.calendarView.setEventHandler(object : CalenderViewInterface.EventHandler {
83+
//CalendarView event handler
84+
calendarView.setEventHandler(object : CalenderViewInterface.EventHandler {
6385

6486
override fun onDayClick(view: View?, date: Date, position: Int) {
6587
val df = SimpleDateFormat.getDateInstance()
@@ -75,6 +97,7 @@ class MainActivity : AppCompatActivity() {
7597

7698
override fun onBackClick(view: View?) {
7799
Log.e("TEST", "onBackClick")
100+
dialog?.dismiss()
78101
}
79102

80103
override fun onMonthClick(view: View?, month: String, position: Int) {
@@ -83,4 +106,5 @@ class MainActivity : AppCompatActivity() {
83106
}
84107
})
85108
}
109+
86110
}

app/src/main/res/layout/activity_main.xml

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
xmlns:tools="http://schemas.android.com/tools"
55
android:layout_width="match_parent"
66
android:layout_height="match_parent"
7-
android:background="@color/black"
7+
android:background="@color/white"
88
tools:context=".MainActivity">
99

1010
<com.shahzadafridi.calendarview.CalendarView
@@ -15,4 +15,15 @@
1515
app:layout_constraintStart_toStartOf="parent"
1616
app:layout_constraintTop_toTopOf="parent" />
1717

18+
<Button
19+
android:id="@+id/showDialogCalendar"
20+
android:layout_width="wrap_content"
21+
android:layout_height="wrap_content"
22+
android:onClick="showDialogCalendar"
23+
android:text="Show Dialog Calendar"
24+
app:layout_constraintBottom_toBottomOf="parent"
25+
app:layout_constraintEnd_toEndOf="parent"
26+
app:layout_constraintStart_toStartOf="parent"
27+
app:layout_constraintTop_toBottomOf="@+id/calendar_view" />
28+
1829
</androidx.constraintlayout.widget.ConstraintLayout>
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
3+
android:layout_width="match_parent"
4+
android:layout_height="wrap_content">
5+
6+
7+
8+
</RelativeLayout>

app/src/main/res/values/themes.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,4 +13,10 @@
1313
<item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item>
1414
<!-- Customize your theme here. -->
1515
</style>
16+
17+
<style name="AnimatedDialogStyle" parent="Theme.AppCompat.Light.Dialog">
18+
<item name="android:windowEnterAnimation">@anim/dialog_slide_bottom</item>
19+
<item name="android:windowExitAnimation">@anim/dialog_slide_up</item>
20+
</style>
21+
1622
</resources>

0 commit comments

Comments
 (0)