经常有一些小操作我会单独拉到扩展函数里,以便于调用,这里分享一下,也是为了以后自己抄自己代码的时候方便找

    在合适的位置创建新的 Kotlin 文件,名字随便,如果够多的话可以单独开一个包放不同种类的文件,我这用到的数量不会很多所以只创建了一个 ext.kt 文件。

    Kotlin 的扩展函数,通俗的说就是你可以自己封装一些方法,能更加简单的调用。

    快速打 Log.d

    至少于我来说,为了打 Log 得切大写还得找句号是一件很累的事情,打 TAG 在非必要的情况下也麻烦,所以简单封装了这个:

    fun logd(message: String) =
        Log.d("hjt", message)

    使用的话直接:

    logd("芜湖")

    Android Studio 理论会自动导入 ext.kt。

    快速打 Toast

    短 Toast

    Toast.LENGTH_SHORT

    fun Context?.toast(message: CharSequence) =
        Toast.makeText(this, message, Toast.LENGTH_SHORT).show()

    使用,通常可以不用带上下文,但是不排除有些情况下需要,有报错的时候可以试试带上下文。

    toast("起飞")
    //或者
    context.toast("起飞")

    长 Toast

    Toast.LENGTH_LONG

    fun Context?.longtoast(message: CharSequence) =
        Toast.makeText(this, message, Toast.LENGTH_LONG).show()

    使用,通常可以不用带上下文,但是不排除有些情况下需要,有报错的时候可以试试带上下文。

    longtoast("起飞")
    //或者
    context.longtoast("起飞")

    快速打 Snackbar

    Snackbar 其实我用的不算很多,但是有时候还是挺有用的,毕竟比 Toast 醒目。

    注意,Snackbar 的扩展函数我是没有带 show() 方法的,原因是 Snackbar 相比 Toast 可能经常需要定制,如 setAction() 之类的,show() 似乎时候在末尾出现,所以需要自己添加。

    短 Snackbar

    Snackbar.LENGTH_SHORT

    fun View.sbar(message: CharSequence) =
        Snackbar.make(this, message, Snackbar.LENGTH_SHORT)

    使用,通常需要带上下文。

    view.sbar("逮虾户").XXX.show()

    长 Snackbar

    Snackbar.LENGTH_LONG

    fun View.sbarlong(message: CharSequence) =
        Snackbar.make(this, message, Snackbar.LENGTH_LONG)

    使用,通常需要带上下文。

    view.sbarlong("逮虾户").XXX.show()

    不定长 Snackbar

    Snackbar.LENGTH_INDEFINITE

    fun View.sbarin(message: CharSequence) =
        Snackbar.make(this, message, Snackbar.LENGTH_INDEFINITE)

    使用,通常需要带上下文。

    view.sbarin("逮虾户").XXX.show()

    检测是否开启暗色模式

    网上挖的,我倒是一直在用这个……

    fun getDarkModeStatus(context: Context): Boolean {
        val mode: Int =
            context.resources.configuration.uiMode and Configuration.UI_MODE_NIGHT_MASK
        return mode == Configuration.UI_MODE_NIGHT_YES
    }

    返回布尔值,可以根据返回的值来确定是否已经开启了深色模式。

    通常我会在 Activity 中配合以下代码来进行对状态栏图标的适配(否则可能会导致白底下白色图标,看不清)

    if (!getDarkModeStatus(this)) {
        window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR
    }

    有新的我会持续更新,虽然应该没人看(