实用扩展:Context、View 与 String 辅助函数
为常见模式构建实际的 Android 风格工具扩展。
实用扩展:Context、View 与 String 辅助函数 是 CoddyKit 上的免费 Kotlin Academy 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Kotlin Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Kotlin Academy 课程共包含 4 节课。
实际应用中的扩展
扩展非常适合用于无法修改的框架类型:Context、View、String 和集合。下面介绍一些直接来自实际 Android 代码库的实用模式。
Context.toast 辅助函数
将冗长的 Toast.makeText(...).show() 封装为一个单行扩展函数。
import android.content.Context
import android.widget.Toast
fun Context.toast(message: String, long: Boolean = false) {
val duration = if (long) Toast.LENGTH_LONG else Toast.LENGTH_SHORT
Toast.makeText(this, message, duration).show()
}
// Usage: context.toast("Saved!")上下文资源辅助函数
在查找资源时避免强制类型转换。扩展可以提高可读性和类型安全性。
import android.content.Context
import androidx.core.content.ContextCompat
fun Context.color(res: Int) = ContextCompat.getColor(this, res)
fun Context.string(res: Int) = getString(res)
fun Context.dp(value: Int) = (value * resources.displayMetrics.density).toInt()
// Usage: val red = context.color(R.color.error)View.show / View.hide
无需繁琐代码即可切换 View.VISIBLE / View.GONE。
import android.view.View
fun View.show() { visibility = View.VISIBLE }
fun View.hide() { visibility = View.GONE }
fun View.invisible() { visibility = View.INVISIBLE }
// Usage: progressBar.show(); button.hide()View.setVisible(布尔值)
根据条件进行切换的单行函数——可以替代 if-else 可见性代码。
import android.view.View
fun View.setVisible(visible: Boolean) {
visibility = if (visible) View.VISIBLE else View.GONE
}
// Usage: errorLabel.setVisible(state.hasError)View.onClick Lambda
更简洁的点击监听器——传入 lambda,而不是匿名的 OnClickListener。
import android.view.View
fun View.onClick(action: (View) -> Unit) {
setOnClickListener(action)
}
// Usage:
// button.onClick { view -> println("clicked") }String.isValidEmail
在 String 上定义特定领域的验证扩展,可以让业务逻辑更易读。
fun String.isValidEmail(): Boolean {
val regex = Regex("^[A-Za-z0-9+_.-]+@[A-Za-z0-9.-]+$")
return regex.matches(this)
}
fun main() {
println("ada@example.com".isValidEmail()) // true
println("nope".isValidEmail()) // false
}String.truncate
使用省略号截断过长的字符串——这是常见的用户界面辅助函数。
fun String.truncate(max: Int, ellipsis: String = "..."): String =
if (length <= max) this else substring(0, max - ellipsis.length) + ellipsis
fun main() {
println("The quick brown fox".truncate(10)) // The qui...
println("short".truncate(10)) // short
}String.toTitleCase
将每个单词的首字母大写——这是常见的格式化辅助函数。
fun String.toTitleCase(): String = split(" ").joinToString(" ") {
if (it.isEmpty()) it
else it[0].uppercaseChar() + it.substring(1).lowercase()
}
fun main() {
println("hello WORLD from kotlin".toTitleCase())
}列表扩展:chunkedBy
根据键将连续元素分组——这对用户界面分区很有用。
fun <T, K> List<T>.chunkedBy(keySelector: (T) -> K): List<List<T>> {
val result = mutableListOf<MutableList<T>>()
var lastKey: K? = null
for (item in this) {
val key = keySelector(item)
if (key == lastKey) result.last().add(item)
else { result.add(mutableListOf(item)); lastKey = key }
}
return result
}
fun main() {
val data = listOf(1, 1, 2, 2, 2, 3, 1)
println(data.chunkedBy { it }) // [[1, 1], [2, 2, 2], [3], [1]]
}活动辅助函数
使用具体化泛型,让导航更安全且代码更简短。
import android.content.Context
import android.content.Intent
inline fun <reified T> Context.startActivity() {
startActivity(Intent(this, T::class.java))
}
// Usage: context.startActivity<MainActivity>()不要过度使用
扩展会添加到全局命名空间中。请让扩展保持专注,限制其作用域(private/internal),并按领域分组(每种接收者类型使用一个文件通常效果很好)。
fun String.shout() = uppercase() + "!"
fun String.whisper() = lowercase() + "..."
fun main() {
println("hello".shout())
println("HELLO".whisper())
}快速检查
为什么扩展非常适合 Context 或 View 这样的 Android 框架类型?
回顾
扩展非常适合为框架类型(上下文、视图、字符串、列表)添加便捷的辅助函数。常见模式包括:可见性切换、点击监听器、资源查找、验证和格式化。请让扩展保持专注、作用域明确,并按接收者类型分组。
常见问题解答
「实用扩展:Context、View 与 String 辅助函数」课时是免费的吗?
是的 — 「实用扩展:Context、View 与 String 辅助函数」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Kotlin Academy 课程的其余内容,请升级到 CoddyKit PRO。 Kotlin Academy 课程共包含 4 节课。
「实用扩展:Context、View 与 String 辅助函数」这节课中我会学到什么?
为常见模式构建实际的 Android 风格工具扩展。 你通过在浏览器中直接运行的动手代码来练习 Kotlin Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Kotlin Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Kotlin Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。
「实用扩展:Context、View 与 String 辅助函数」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Kotlin Academy 课中编写并运行代码吗?
能。每节 Kotlin Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- 扩展函数:语法与分派规则
- 扩展属性与计算扩展
- 作用域扩展与伴生对象扩展
- 实用扩展:Context、View 与 String 辅助函数