我是编程新手,刚刚开始学习Kotlin for Android编程. 目前,我正在处理应用程序待办事项列表,其中有一个id为date PickerEditText的EditText输入. 当您单击编辑文本输入时,将显示日历.所以你可以 Select 日期.

我想为两个问题找到一个解决方案.

  1. 目前,我不知道如何在 Select 日期时使用俄语语言环境. 它应该使用这样的格式:俄语中的日:月:年.

  2. DatePickerDialog应该允许用户 Select 任何日期,而不仅仅是当前日期.

我找到了两个解决方案,但在第一个中,日期格式和区域设置不是俄语.但它提供了 Select 任何日期的机会,并将 Select 的日期发送到EditText.

第二个解决方案是很好的日期格式和使用俄语语言环境.但这其中存在一个问题.它会将当前日期发送到文本编辑,尽管您 Select 了另一个日期.

以下是第一个解决方案的代码:

import android.app.DatePickerDialog
import android.app.Dialog
import android.icu.util.Calendar
import android.os.Bundle
import android.view.Gravity
import android.view.View
import android.view.WindowManager
import android.widget.Button
import android.widget.EditText

class CustomDialog(var activity: MainActivity) : Dialog(activity),  View.OnClickListener {

    var yes: Button? = null
    var no: Button? = null
    private lateinit var inputField: EditText
    private lateinit var inputDescription: EditText
    private lateinit var editTextDate: EditText


    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.dialog_template)
        inputField = findViewById(R.id.dialogInput)
        inputDescription = findViewById(R.id.dialogDescription)

        val lp = WindowManager.LayoutParams()
        lp.copyFrom(this.window?.attributes)
        lp.width = WindowManager.LayoutParams.MATCH_PARENT
        lp.height = WindowManager.LayoutParams.WRAP_CONTENT
        lp.gravity = Gravity.CENTER
        this.window?.attributes = lp

        yes = findViewById<Button>(R.id.dialogOkButton)
        no = findViewById<Button>(R.id.dialogCancelButton)
        editTextDate = findViewById(R.id.datePickerEditText)
        yes?.setOnClickListener(this)
        no?.setOnClickListener(this)

        editTextDate.setOnClickListener {

            // on below line we are getting
            // the instance of our calendar.
            val c = Calendar.getInstance()



            // on below line we are getting
            // our day, month and year.
            val year = c.get(Calendar.YEAR)
            val month = c.get(Calendar.MONTH)
            val day = c.get(Calendar.DAY_OF_MONTH)

            // on below line we are creating a
            // variable for date picker dialog.
            val datePickerDialog = DatePickerDialog(
                // on below line we are passing context.
                activity,
                { view, year, monthOfYear, dayOfMonth ->
                    // on below line we are setting
                    // date to our edit text.
                   val dat = (dayOfMonth.toString() + "-" + (monthOfYear + 1) + "-" + year)
                    editTextDate.setText(dat)


                },
                // on below line we are passing year, month
                // and day for the selected date in our date picker.
                year,
                month,
                day
            )

            // at last we are calling show
            // to display our date picker dialog.
            datePickerDialog.show()
        }

    }

    override fun onClick(view: View){
        when (view.id) {
            R.id.dialogOkButton -> {
                val inputResult = inputField.text
                val inputDescription = inputDescription.text
                val inputDate = editTextDate.text
                activity.addItem(inputResult.toString(), inputDescription.toString(), inputDate.toString())
                dismiss()
            }
            R.id.dialogCancelButton -> {
                dismiss()
            }
            else -> {
            }
        }
    }

}

下面是第二个解决方案的代码:

import android.app.DatePickerDialog
import android.app.Dialog
import android.icu.util.Calendar
import android.os.Bundle
import android.view.Gravity
import android.view.View
import android.view.WindowManager
import android.widget.Button
import android.widget.EditText

class CustomDialog(var activity: MainActivity) : Dialog(activity),  View.OnClickListener {

    var yes: Button? = null
    var no: Button? = null
    private lateinit var inputField: EditText
    private lateinit var inputDescription: EditText
    private lateinit var editTextDate: EditText


    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.dialog_template)
        inputField = findViewById(R.id.dialogInput)
        inputDescription = findViewById(R.id.dialogDescription)

        val lp = WindowManager.LayoutParams()
        lp.copyFrom(this.window?.attributes)
        lp.width = WindowManager.LayoutParams.MATCH_PARENT
        lp.height = WindowManager.LayoutParams.WRAP_CONTENT
        lp.gravity = Gravity.CENTER
        this.window?.attributes = lp

        yes = findViewById<Button>(R.id.dialogOkButton)
        no = findViewById<Button>(R.id.dialogCancelButton)
        editTextDate = findViewById(R.id.datePickerEditText)
        yes?.setOnClickListener(this)
        no?.setOnClickListener(this)

        editTextDate.setOnClickListener {

            // on below line we are getting
            // the instance of our calendar.
            val c = Calendar.getInstance()



            // on below line we are getting
            // our day, month and year.
            val year = c.get(Calendar.YEAR)
            val month = c.get(Calendar.MONTH)
            val day = c.get(Calendar.DAY_OF_MONTH)

            // on below line we are creating a
            // variable for date picker dialog.
            val datePickerDialog = DatePickerDialog(
                // on below line we are passing context.
                activity,
                { view, year, monthOfYear, dayOfMonth ->


                    val simpleDateFormat = SimpleDateFormat("EEEE, dd-MMM-yyyy hh:mm:ss a", Locale("ru"))
                   val dateTime = simpleDateFormat.format(c.time)
                   editTextDate.setText(dateTime)


                },
                // on below line we are passing year, month
                // and day for the selected date in our date picker.
                year,
                month,
                day
            )
           // datePickerDialog.datePicker.locale = Locale("ru")

            // at last we are calling show
            // to display our date picker dialog.
            datePickerDialog.show()
        }

    }

    override fun onClick(view: View){
        when (view.id) {
            R.id.dialogOkButton -> {
                val inputResult = inputField.text
                val inputDescription = inputDescription.text
                val inputDate = editTextDate.text
                activity.addItem(inputResult.toString(), inputDescription.toString(), inputDate.toString())
                dismiss()
            }
            R.id.dialogCancelButton -> {
                dismiss()
            }
            else -> {
            }
        }
    }

}

如何设置代码顺序DatePickerDialog应使用俄语区域设置,日期格式为天:月俄语:年?如果要在DatePickerDialog中 Select 非当前日期,则应按原样将其发送到编辑文本输入.

谢谢!

如何设置代码顺序DatePickerDialog应使用俄语区域设置,日期格式为天:月俄语:年?如果要在DatePickerDialog中 Select 非当前日期,则应按原样将其发送到编辑文本输入.

谢谢!

推荐答案

下面是您的第二个解决方案:

{ view, year, monthOfYear, dayOfMonth ->
    val simpleDateFormat = SimpleDateFormat("EEEE, dd-MMM-yyyy hh:mm:ss a", Locale("ru"))
    val dateTime = simpleDateFormat.format(c.time)
    editTextDate.setText(dateTime)
},

请注意,您正在设置c的时间格式,这是您使用当前日期设置的日历.您需要使用传递给这个lambda的日期进行格式化,如下所示:

{ view, year, monthOfYear, dayOfMonth ->
    val simpleDateFormat = SimpleDateFormat("EEEE, dd-MMM-yyyy hh:mm:ss a", Locale("ru"))
    val selectedDateCalendar = Calendar.getInstance().apply {
            set(
                year = year,
                month = monthOfYear,
                date = dayOfMonth
            )
        }
    val dateTime = simpleDateFormat.format(selectedDateCalendar.time)
    editTextDate.setText(dateTime)
},

Android相关问答推荐

Android Studio中的Kotlin版本不兼容错误:需要元数据1.9.0,但找到1.6.0

在Android Studio中,如何在BuildSrc Dependenices Kotlin文件中指定时标记与旧版本的依赖关系

在带有REACT-Native-CLI的开发和生产中使用Firebase的最佳实践

OutlinedTextField仅显示一次

当按下通知时,将Android应用程序置于前台

Android 12+BLE字节不同

使用 JNI 从 Android 应用程序中使用 Kotlin/Native 预构建共享库

Android:使用依赖项 ViewModelProviderFactory 初始化 ViewModel 的正确方法

根据另一个数组的值对数组进行排序

以下代码如何在 Android 上运行

如何在 Delphi 和 Android 上避免 Indy Socket Error #13 Access denied 异常?

Material 3 中的 ModalBottomSheet 用于 compose

在 jetpack compose 中交替使用 View.INVISIBLE

在 Jetpack Compose 中使用 .observeAsState() 时,如何在更改 MutableLiveData 的值后开始执行一段代码?

Jetpack Compose Material3 禁用 ListItem

如何将设备屏幕位置转换为发送事件位置?

不能在kotlin的lazycolumn中使用列表

房间实时数据:启动时崩溃

将生成的 AAR 与 Composables 一起使用时未解决的参考

Google API:java.lang.ClassNotFoundException:找不到类sun.misc.Service