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哦!

目录
相关文章
|
16天前
|
移动开发 Java Android开发
构建高效Android应用:探究Kotlin与Java的性能差异
【4月更文挑战第3天】在移动开发领域,性能优化一直是开发者关注的焦点。随着Kotlin的兴起,其在Android开发中的地位逐渐上升,但关于其与Java在性能方面的对比,尚无明确共识。本文通过深入分析并结合实际测试数据,探讨了Kotlin与Java在Android平台上的性能表现,揭示了在不同场景下两者的差异及其对应用性能的潜在影响,为开发者在选择编程语言时提供参考依据。
|
17天前
|
数据库 Android开发 开发者
构建高效Android应用:Kotlin协程的实践指南
【4月更文挑战第2天】随着移动应用开发的不断进步,开发者们寻求更流畅、高效的用户体验。在Android平台上,Kotlin语言凭借其简洁性和功能性赢得了开发社区的广泛支持。特别是Kotlin协程,作为一种轻量级的并发处理方案,使得异步编程变得更加简单和直观。本文将深入探讨Kotlin协程的核心概念、使用场景以及如何将其应用于Android开发中,以提高应用性能和响应能力。通过实际案例分析,我们将展示协程如何简化复杂任务,优化资源管理,并为最终用户提供更加流畅的体验。
|
21天前
|
Java Android开发
Android 开发获取通知栏权限时会出现两个应用图标
Android 开发获取通知栏权限时会出现两个应用图标
12 0
|
18天前
|
Java Android开发 开发者
构建高效Android应用:Kotlin协程的实践与优化
在响应式编程范式日益盛行的今天,Kotlin协程作为一种轻量级的线程管理解决方案,为Android开发带来了性能和效率的双重提升。本文旨在探讨Kotlin协程的核心概念、实践方法及其在Android应用中的优化策略,帮助开发者构建更加流畅和高效的应用程序。通过深入分析协程的原理与应用场景,结合实际案例,本文将指导读者如何优雅地解决异步任务处理,避免阻塞UI线程,从而优化用户体验。
|
1天前
|
移动开发 Android开发 开发者
构建高效Android应用:采用Kotlin进行内存优化的策略
【4月更文挑战第18天】 在移动开发领域,性能优化一直是开发者关注的焦点。特别是对于Android应用而言,由于设备和版本的多样性,确保应用流畅运行且占用资源少是一大挑战。本文将探讨使用Kotlin语言开发Android应用时,如何通过内存优化来提升应用性能。我们将从减少不必要的对象创建、合理使用数据结构、避免内存泄漏等方面入手,提供实用的代码示例和最佳实践,帮助开发者构建更加高效的Android应用。
5 0
|
12天前
|
移动开发 API Android开发
构建高效Android应用:探究Kotlin协程的优势与实践
【4月更文挑战第7天】 在移动开发领域,性能优化和应用响应性的提升一直是开发者追求的目标。近年来,Kotlin语言因其简洁性和功能性在Android社区中受到青睐,特别是其对协程(Coroutines)的支持,为编写异步代码和处理并发任务提供了一种更加优雅的解决方案。本文将探讨Kotlin协程在Android开发中的应用,揭示其在提高应用性能和简化代码结构方面的潜在优势,并展示如何在实际项目中实现和优化协程。
|
12天前
|
XML 开发工具 Android开发
构建高效的安卓应用:使用Jetpack Compose优化UI开发
【4月更文挑战第7天】 随着Android开发不断进化,开发者面临着提高应用性能与简化UI构建流程的双重挑战。本文将探讨如何使用Jetpack Compose这一现代UI工具包来优化安卓应用的开发流程,并提升用户界面的流畅性与一致性。通过介绍Jetpack Compose的核心概念、与传统方法的区别以及实际集成步骤,我们旨在提供一种高效且可靠的解决方案,以帮助开发者构建响应迅速且用户体验优良的安卓应用。
|
14天前
|
Java Android开发
Android开发之使用OpenGL实现翻书动画
本文讲述了如何使用OpenGL实现更平滑、逼真的电子书翻页动画,以解决传统贝塞尔曲线方法存在的卡顿和阴影问题。作者分享了一个改造后的外国代码示例,提供了从前往后和从后往前的翻页效果动图。文章附带了`GlTurnActivity`的Java代码片段,展示如何加载和显示书籍图片。完整工程代码可在作者的GitHub找到:https://github.com/aqi00/note/tree/master/ExmOpenGL。
19 1
Android开发之使用OpenGL实现翻书动画
|
14天前
|
Android开发 开发者
Android开发之OpenGL的画笔工具GL10
这篇文章简述了OpenGL通过GL10进行三维图形绘制,强调颜色取值范围为0.0到1.0,背景和画笔颜色设置方法;介绍了三维坐标系及与之相关的旋转、平移和缩放操作;最后探讨了坐标矩阵变换,包括设置绘图区域、调整镜头参数和改变观测方位。示例代码展示了如何使用这些方法创建简单的三维立方体。
12 1
Android开发之OpenGL的画笔工具GL10
|
26天前
|
调度 数据库 Android开发
构建高效Android应用:Kotlin协程的实践与优化
在Android开发领域,Kotlin以其简洁的语法和平台友好性成为了开发的首选语言。其中,Kotlin协程作为处理异步任务的强大工具,它通过提供轻量级的线程管理机制,使得开发者能够在不阻塞主线程的情况下执行后台任务,从而提升应用性能和用户体验。本文将深入探讨Kotlin协程的核心概念,并通过实例演示如何在实际的Android应用中有效地使用协程进行网络请求、数据库操作以及UI的流畅更新。同时,我们还将讨论协程的调试技巧和常见问题的解决方法,以帮助开发者避免常见的陷阱,构建更加健壮和高效的Android应用。
35 4