xml code
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@ + id/rl_container_timepicker" android:layout_width="match_parent" android:layout_height="wrap_content" android:visibility="visible" android:layout_margin="@dimen/dp_10" android:background="@drawable/bg_clear_data" > <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" android:background="@drawable/bg_clear_data" > <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:padding="16dp"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Select time" android:layout_centerHorizontal="true" android:textSize="18sp" android:textColor="@color/bk_black"/> </RelativeLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="200dp" android:orientation="horizontal" android:gravity="center"> <LinearLayout android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:orientation="vertical" android:gravity="center"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="14sp" android:text="Start time" android:textColor="@color/bk_black"/> <TimePicker android:id="@ + id/timepicker_start" android:layout_width="wrap_content" android:layout_height="wrap_content" android:timePickerMode="spinner" /> </LinearLayout> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="To"/> <LinearLayout android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:orientation="vertical" android:gravity="center"> <TextView android:textSize="14sp" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="End time" android:textColor="@color/bk_black"/> <TimePicker android:id="@ + id/timepicker_end" android:layout_width="wrap_content" android:layout_height="wrap_content" android:timePickerMode="spinner" /> </LinearLayout> </LinearLayout> <RelativeLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:padding="16dp"> <androidx.appcompat.widget.AppCompatButton android:id="@ + id/btCancal" android:layout_width="72dp" android:layout_height="32dp" android:text="Cancel" android:textColor="#ffffffff" android:textSize="14sp" android:gravity="center" android:background="@drawable/bt_cancal" android:layout_marginEnd="82dp" android:layout_alignEnd="@ + id/btQueRen" /> <androidx.appcompat.widget.AppCompatButton android:id="@ + id/btQueRen" android:layout_width="72dp" android:layout_height="32dp" android:text="OK" android:textColor="#ffffffff" android:textSize="14sp" android:gravity="center" android:background="@drawable/bt_queren" android:layout_marginEnd="20dp" android:layout_marginBottom="20dp" android:layout_alignParentEnd="true" /> </RelativeLayout> </LinearLayout> </RelativeLayout>
kotlin code
import android.app.Dialog import android.content.Context import android.util.Log import android.view.LayoutInflater import android.widget.Button import android.widget.TimePicker import androidx.appcompat.app.AppCompatDialog import com.demon.androidbasic.toast.ToastUtils import com.en.information.R class DoubleTimeSelectorDialog(private val mContext: Context) {<!-- --> private var startHour = 0 private var startMinute = 0 private var endHour = 0 private var endMinute = 0 private val bottomSheetDialog = AppCompatDialog(mContext) fun setDialog(): Dialog {<!-- --> val dialogView = LayoutInflater.from(mContext).inflate(R.layout.dialog_time_picker, null) val startTimePicker = dialogView.findViewById<TimePicker>(R.id.timepicker_start) val endTimePicker = dialogView.findViewById<TimePicker>(R.id.timepicker_end) val tvCancel = dialogView.findViewById<Button>(R.id.btCancal) val tvConfirm = dialogView.findViewById<Button>(R.id.btQueRen) startTimePicker.descendantFocusability = TimePicker.FOCUS_BLOCK_DESCENDANTS // Set the click event not to play the keyboard startTimePicker.setIs24HourView(true) // Set the time display to 24 hours // startTimePicker.setHour(startHour) // startTimePicker.setMinute(startMinute) //Set the current minute (0-59) startTimePicker.setOnTimeChangedListener {<!-- --> _, hourOfDay, minute -> startHour = hourOfDay startMinute = minute Log.d("!!!!!!!!!!!!!!!start", "$hourOfDay,$minute") } endTimePicker.descendantFocusability = TimePicker.FOCUS_BLOCK_DESCENDANTS // Set the click event not to play the keyboard endTimePicker.setIs24HourView(true) // Set the time display to 24 hours // startTimePicker.setHour(startHour) // startTimePicker.setMinute(startMinute) //Set the current minute (0-59) endTimePicker.setOnTimeChangedListener {<!-- --> _, hourOfDay, minute -> endHour = hourOfDay endMinute = minute Log.d("!!!!!!!!!!!!!!!!!!end", "$hourOfDay,$minute") } tvCancel.setOnClickListener {<!-- --> bottomSheetDialog.dismiss() } tvConfirm.setOnClickListener {<!-- --> if (startHour > endHour || (startHour == endHour & amp; & amp; startMinute >= endMinute)) {<!-- --> ToastUtils.showToast(mContext, "The end time is less than the start time, please select again!") return@setOnClickListener } Log.e("Start time:", "$startHour, $startMinute") Log.e("End time:", "$endHour ,$endMinute") bottomSheetDialog.dismiss() } bottomSheetDialog.setContentView(dialogView) return bottomSheetDialog } }