kotlin常用工具类总结,高效优雅的开发Android

简介:   随着Kotlin的普及,很有必要对开发中常用的工具类总结整理,当然包括利用kotlin扩展Android原生控件方法、属性。 主要分工具类util跟原生控件扩展ext两部分 toast 用法 toast("hello") click 用法 button.

1

  随着Kotlin的普及,很有必要对开发中常用的工具类总结整理,当然包括
利用kotlin扩展Android原生控件方法、属性。

主要分工具类util跟原生控件扩展ext两部分

  1. toast 用法

     toast("hello")
     
  2. click 用法

    button.click{
           // todo
        }
        
    
  3. 启动activity

start+要启动的activity (比如 DemoActivity)

  1. SharePreferenceUtil 用法

     1). var spValue by SharePreferenceUtil ("key", "DefaultValue")
    
     2). set data spValue = "value"
    
     3). get data spValue
    
  1. NetworkUtil 用法

    1). isNetworkAvailable(context)
    
    2). isConnected(context)
    
    3). getNetworkType(context)
    
  2. 获取屏幕宽高以及Dp/Px转化用法

    1). dp2px(context) or px2dp
    
    2). screenWidth or screenHeight
    
  1. RegularUtil 用法

    1). 身份证是否合法 isIDCard("no")
    
    2). 手机号是否合法 isMobile("no")
    
    3). isEmail是否合法 isEmail("xx.mail.com")
    
    4). 用户名校验 isUsername()
    
    5). 格式日期校验 isDate()
    
  2. EncodeUtil 用法

    1). 普通字符串编码 encode(input,"")
    
    2). 普通字符串解码 decode(input,"")
    
    3). base64Encode(input: String),base64Decode(input: String?)
    
    4). binaryEncode(input: String),binaryDecode(input: String)
    
    5). htmlEncode(input: CharSequence?),htmlDecode(input: String?)
    

在此,仅列举一下 SharePreferenceUtil代码,

   
class SharePreferenceUtil<T>(val name: String, private val default: T) : ReadWriteProperty<Any?, T> {
private val prefs: SharedPreferences by lazy {
     appCtx.getSharedPreferences("default",Context.MODE_PRIVATE)
}

override fun getValue(thisRef: Any?, property: KProperty<*>): T {
    return getValue(name, default)
}

override fun setValue(thisRef: Any?, property: KProperty<*>, value: T) {
    putValue(name, value)
}

@SuppressLint("CommitPrefEdits")
private fun <T> putValue(name: String, value: T) = with(prefs.edit()) {
    when (value) {
        is Long -> putLong(name, value)
        is String -> putString(name, value)
        is Int -> putInt(name, value)
        is Boolean -> putBoolean(name, value)
        is Float -> putFloat(name, value)
        else -> putString(name, serialize(value))
    }.apply()
}

@Suppress("UNCHECKED_CAST")
fun <T> getValue(name: String, default: T): T = with(prefs) {
    val res: Any = when (default) {
        is Long -> getLong(name, default)
        is String -> this!!.getString(name, default)!!
        is Int -> getInt(name, default)
        is Boolean -> getBoolean(name, default)
        is Float -> getFloat(name, default)
        else -> deSerialization(getString(name, serialize(default)))
    }
    return res as T
}

/**
 * 删除全部数据
 */
fun clearPreference() {
    prefs.edit().clear().apply()
}

/**
 * 根据key删除存储数据
 */
fun clearPreference(key: String) {
    prefs.edit().remove(key).apply()
}

/**
 * 序列化对象
 * @param person
 * *
 * @return
 * *
 * @throws IOException
 */
@Throws(IOException::class)
private fun <A> serialize(obj: A): String {
    val byteArrayOutputStream = ByteArrayOutputStream()
    val objectOutputStream = ObjectOutputStream(
        byteArrayOutputStream
    )
    objectOutputStream.writeObject(obj)
    var serStr = byteArrayOutputStream.toString("ISO-8859-1")
    serStr = java.net.URLEncoder.encode(serStr, "UTF-8")
    objectOutputStream.close()
    byteArrayOutputStream.close()
    return serStr
}

/**
 * 反序列化对象
 * @param str
 * *
 * @return
 * *
 * @throws IOException
 * *
 * @throws ClassNotFoundException
 */
@Suppress("UNCHECKED_CAST")
@Throws(IOException::class, ClassNotFoundException::class)
private fun <A> deSerialization(str: String?): A {
    val redStr = java.net.URLDecoder.decode(str, "UTF-8")
    val byteArrayInputStream = ByteArrayInputStream(
        redStr.toByteArray(charset("ISO-8859-1"))
    )
    val objectInputStream = ObjectInputStream(
        byteArrayInputStream
    )
    val obj = objectInputStream.readObject() as A
    objectInputStream.close()
    byteArrayInputStream.close()
    return obj
}
/**
 * 查询某个key是否已经存在
 *
 * @param key
 * @return
 */
fun contains(key: String): Boolean {
    return prefs.contains(key)
}

/**
 * 返回所有的键值对
 *
 * @param context
 * @return
 */
fun getAll(): Map<String, *> {
    return prefs.all
}

}
···
最后,附上Github地址,https://github.com/AlbertShen0211/Android-Control-Extension

欢迎使用,觉得好的话,不要忘了给star哦!

目录
相关文章
|
15天前
|
安全 Java Android开发
为什么大厂要求安卓开发者掌握Kotlin和Jetpack?深度解析现代Android开发生态优雅草卓伊凡
为什么大厂要求安卓开发者掌握Kotlin和Jetpack?深度解析现代Android开发生态优雅草卓伊凡
42 0
为什么大厂要求安卓开发者掌握Kotlin和Jetpack?深度解析现代Android开发生态优雅草卓伊凡
|
3月前
|
JavaScript Linux 网络安全
Termux安卓终端美化与开发实战:从下载到插件优化,小白也能玩转Linux
Termux是一款安卓平台上的开源终端模拟器,支持apt包管理、SSH连接及Python/Node.js/C++开发环境搭建,被誉为“手机上的Linux系统”。其特点包括零ROOT权限、跨平台开发和强大扩展性。本文详细介绍其安装准备、基础与高级环境配置、必备插件推荐、常见问题解决方法以及延伸学习资源,帮助用户充分利用Termux进行开发与学习。适用于Android 7+设备,原创内容转载请注明来源。
558 76
|
4月前
|
前端开发 Java Shell
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
292 20
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
|
4月前
|
JavaScript 搜索推荐 Android开发
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
121 8
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
|
4月前
|
Dart 前端开发 Android开发
【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
106 4
【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
|
4月前
|
Android开发 开发者 Kotlin
Android实战经验之Kotlin中快速实现MVI架构
MVI架构通过单向数据流和不可变状态,提供了一种清晰、可预测的状态管理方式。在Kotlin中实现MVI架构,不仅提高了代码的可维护性和可测试性,还能更好地应对复杂的UI交互和状态管理。通过本文的介绍,希望开发者能够掌握MVI架构的核心思想,并在实际项目中灵活应用。
135 8
|
4月前
|
安全 Android开发 iOS开发
escrcpy:【技术党必看】Android开发,Escrcpy 让你无线投屏新体验!图形界面掌控 Android,30-120fps 超流畅!🔥
escrcpy 是一款基于 Scrcpy 的开源项目,使用 Electron 构建,提供图形化界面来显示和控制 Android 设备。它支持 USB 和 Wi-Fi 连接,帧率可达 30-120fps,延迟低至 35-70ms,启动迅速且画质清晰。escrcpy 拥有丰富的功能,包括自动化任务、多设备管理、反向网络共享、批量操作等,无需注册账号或广告干扰。适用于游戏直播、办公协作和教育演示等多种场景,是一款轻量级、高性能的 Android 控制工具。
207 1
|
存储 Java 开发工具
Android开发的技术与开发流程
Android开发的技术与开发流程
519 1
|
10月前
|
安全 Android开发 Swift
安卓与iOS开发:平台差异与技术选择
【8月更文挑战第26天】 在移动应用开发的广阔天地中,安卓和iOS两大平台各占一方。本文旨在探索这两个系统在开发过程中的不同之处,并分析开发者如何根据项目需求选择合适的技术栈。通过深入浅出的对比,我们将揭示各自平台的优势与挑战,帮助开发者做出更明智的决策。
157 5
|
10月前
|
移动开发 搜索推荐 Android开发
安卓与iOS开发:一场跨平台的技术角逐
在移动开发的广阔舞台上,两大主角——安卓和iOS,持续上演着激烈的技术角逐。本文将深入浅出地探讨这两个平台的开发环境、工具和未来趋势,旨在为开发者揭示跨平台开发的秘密,同时激发读者对技术进步的思考和对未来的期待。