SnapTimePicker 项目教程
1. 项目的目录结构及介绍
SnapTimePicker 项目的目录结构如下:
SnapTimePicker/
├── app/
│ ├── build.gradle
│ ├── src/
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ └── com/
│ │ │ │ └── akexorcist/
│ │ │ │ └── snaptimepicker/
│ │ │ │ ├── MainActivity.kt
│ │ │ │ ├── SnapTimePickerDialog.kt
│ │ │ │ ├── TimeValue.kt
│ │ │ │ └── TimeRange.kt
│ │ │ └── res/
│ │ │ ├── layout/
│ │ │ ├── values/
│ │ │ └── ...
│ │ └── test/
│ └── ...
├── build.gradle
├── gradle.properties
├── settings.gradle
└── ...
目录结构介绍
app/
: 包含应用程序的主要代码和资源文件。build.gradle
: 应用程序的构建脚本。src/
: 源代码目录。main/
: 主代码目录。java/
: Java 或 Kotlin 代码目录。com/akexorcist/snaptimepicker/
: SnapTimePicker 的主要代码目录。MainActivity.kt
: 应用程序的主活动。SnapTimePickerDialog.kt
: SnapTimePicker 对话框的主要类。TimeValue.kt
: 时间数据持有类。TimeRange.kt
: 时间范围数据持有类。
res/
: 资源文件目录。layout/
: 布局文件目录。values/
: 字符串、颜色等资源文件目录。
test/
: 测试代码目录。
build.gradle
: 项目的构建脚本。gradle.properties
: Gradle 配置文件。settings.gradle
: 项目设置文件。
2. 项目的启动文件介绍
项目的启动文件是 MainActivity.kt
,位于 app/src/main/java/com/akexorcist/snaptimepicker/
目录下。
MainActivity.kt 介绍
MainActivity.kt
是应用程序的主活动,负责初始化界面和处理用户交互。以下是 MainActivity.kt
的部分代码:
package com.akexorcist.snaptimepicker
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import android.view.View
import com.akexorcist.snaptimepicker.databinding.ActivityMainBinding
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
binding.defaultTimePicker.setOnClickListener {
// Default TimePicker
val dialog = SnapTimePickerDialog.Builder()
.setTitle(R.string.title)
.setTitleColor(android.R.color.white)
.build()
dialog.setListener { hour, minute ->
onTimePicked(hour, minute)
}
dialog.show(supportFragmentManager, SnapTimePickerDialog.TAG)
}
binding.customTimePicker.setOnClickListener {
// Custom TimePicker
val dialog = SnapTimePickerDialog.Builder()
.setTitle(R.string.title)
.setPrefix(R.string.time_prefix)
.setSuffix(R.string.time_suffix)
.setThemeColor(R.color.colorAccent)
.setTitleColor(android.R.color.black)
.build()
dialog.setListener { hour, minute ->
onTimePicked(hour, minute)
}
dialog.show(supportFragmentManager, SnapTimePickerDialog.TAG)
}
}
private fun onTimePicked(selectedHour: Int, selectedMinute: Int) {
val hour = selectedHour.toString().padStart(2, '0')
val minute = selectedMinute.toString().