AndroidKtx
Android frequently-used Kotlin extensions collection | 安卓开发中最好用的 Kotlin 扩展方法合集
Install / Use
/learn @dengzii/AndroidKtxREADME
AndroidKtx
Android 开发中最常用的扩展函数
目录
Download
implementation 'com.dengzii:android-ktx:+'
Sample
File
// 重命名文件
fun File.rename(newName: String): Boolean
// 获取或创建文件
fun File.createOrExistsFile(): Boolean
// 获取文件 md5
fun File.md5(): ByteArray?
View
- 点击防抖, 默认 300ms
fun <T : View> T.antiShakeClick(
clickInterval: Long = viewShakeClickInterval,
onClickListener: (View) -> Unit
)
- 遍历子 View
fun ViewGroup.forEachIndexed(action: (Int, View) -> Unit)
- 隐藏显示, 反转可见性, 反转可点击
fun View.gone()
fun View.show()
fun View.hide()
fun View.toggleVisible()
fun View.toggleEnable()
- 转换成 Bitmap
fun View.toBitmap(config: Bitmap.Config): Bitmap
- TextView 监听
mEtInput.addTextWatcher {
onChange { s, start, before, count ->
}
afterChange {
}
}
- 设置 Drawable
fun TextView.setDrawableEnd(@DrawableRes drawableEnd: Int)
- 快速设置 ColorStateList, 各种状态的颜色
fun TextView.setTextColorStateList(block: ViewStateBuilder.() -> Unit)
Context
- 获取资源
val color = getColorCompat(R.color.colorPrimary)
val drawable = getDrawableCompat(R.drawable.ic_launcher_foreground)
- 检查权限
val canReadStorage = isPermissionGranted(Manifest.permission.READ_EXTERNAL_STORAGE)
- UI 相关
// 获取状态栏高度
fun Context.getStatusBarHeight():Int
// 获取屏幕高度
fun Context.getScreenHeight(): Int
Activity
- 通过委托延迟绑定 View 到字段
private val mBtSubmit by lazyFindView<Button>(R.id.bt_submit)
- 通过委托延迟获取 Intent 字段
private val mExtOrderId by intentExtra<Int>("ext_order_id", -1)
- 无参数快速启动Activity
startActivity<SecondActivity>()
- 带参数启动 Activity
startActivity<SecondActivity> {
putExtra("id", 1)
}
- 快速获取 ActivityResult
startActivityForResult<SecondActivity>(1) { requestCode, resultCode, data ->
// TODO
}
val intent = Intent(this, SecondActivity::class.java).run {
putExtra("id", 1)
}
startActivityForResult(intent, 0){ requestCode, resultCode, data ->
// TODO
}
- 快速从系统选择文件
requestSelectFile("image/*") {
println("image: " + it?.path)
}
Intent
- 检查键是否存在
intent.checkExtraExists("Key1", "Key2", "Key3") {
println("Key $it does not exist.")
}
- 默认值
intent.getStringExtraOrDefault("Key", "DefaultValue")
Bitmap
// 转换为 Drawable
fun Bitmap.toDrawable(): Bitmap
// 转换为圆角
fun Bitmap.toRound( borderSize: Int, borderColor: Int = 0, recycle: Boolean): Bitmap
// 保存到文件
fun Bitmap.saveTo(file: File, format: Bitmap.CompressFormat, quality: Int): Boolean
// 保存到相册
fun Bitmap.saveToAlbum(format: Bitmap.CompressFormat, quality: Int): Boolean
// 模糊
fun Bitmap.blur(radius: Int, recycle: Boolean): Bitmap
Uri
- 从 Uri 获取绝对路径
fun Uri.getRealPath(context: Context): String?
SharedPreferences
- 便捷配置和操作 SharedPreferences
import android.content.Context
import com.dengzii.ktx.android.content.Preferences
import com.dengzii.ktx.android.content.preference
import com.dengzii.ktx.android.content.update
class AppConfig(context: Context) : Preferences(context, "spf_app_config") {
var userName:String by preference("Tom")
var age by preference(10)
var weight by preference(200f)
var hobbits by preference(mutableSetOf("volleyball", "codding"))
}
fun sample(context: Context){
val appConfig = AppConfig(context).update {
userName = "Tome"
age = 18
}
println(appConfig.weight) // 10
println(appConfig.age) // 18
appConfig.hobbits.add("eat")
appConfig.commit()
}
