美文网首页
Kotlin dp px 转换工具类

Kotlin dp px 转换工具类

作者: pdog18 | 来源:发表于2018-07-16 13:54 被阅读321次

    Step 1. Add the JitPack repository to your build file

    Add it in your root build.gradle at the end of repositories:

    allprojects {
        repositories {
            //...
            maven { url 'https://jitpack.io' }
        }
    }
    

    Step 2. Add the dependency

    dependencies {
          implementation 'com.github.pdog18:dimension-extensions:1.0'
    }
    

    Step 3. Use in Kotlin's code(or other file)

    val height = 48f.dp
    

    说明

    android开发中有的时候处理控件大小我们会需要用到dp值来进行处理,针对这种情况,我们一般会写一个类似dp2px(float dp)static方法。

    然后每次调用的时候这样来使用

    float height = dp2px(48f)
    //use height
    

    当阅读代码时,我们会脑补一个48fdp2px() 函数调用的“回头”操作,
    阅读代码的顺序大概是这样的

    float height = dp2px(48f)
    float height  //定义一个height
    dp2px(48f)  // height 值是一个函数结果,函数参数是48f
    dp2px(48f)  // 再次,48f是从dp转换成px
    

    简直就是石器时代的代码啊!

    现在我们到了工业时代的kotlin 里用扩展字段。我可以将代码写成这样

    val height = 48f.dp
    

    定义一个height 值为 48f 对应的dp
    可以读出来的代码!真香!


    扩展字段源码

    1. 无关Context 不需要传入 context调用 ,也不需要在 application初始化,复制即用!
    2. 测试通过displayMetricsActivity 被反射修改后,会使用反射后的值来进行转换
    package com.pdog.dimension
    
    import android.content.res.Resources
    
    /**
     * 正常编码中一般只会用到 [dp]/[sp] ;
     * 其中[dp]/[sp] 会根据系统分辨率将输入的dp/sp值转换为对应的px
     */
    val Float.dp: Float                 // [xxhdpi](360 -> 1080)
        get() = android.util.TypedValue.applyDimension(
            android.util.TypedValue.COMPLEX_UNIT_DIP, this, Resources.getSystem().displayMetrics)
    
    val Int.dp: Int
        get() = android.util.TypedValue.applyDimension(
            android.util.TypedValue.COMPLEX_UNIT_DIP, this.toFloat(), Resources.getSystem().displayMetrics).toInt()
    
    
    val Float.sp: Float                 // [xxhdpi](360 -> 1080)
        get() = android.util.TypedValue.applyDimension(
            android.util.TypedValue.COMPLEX_UNIT_SP, this, Resources.getSystem().displayMetrics)
    
    
    val Int.sp: Int
        get() = android.util.TypedValue.applyDimension(
            android.util.TypedValue.COMPLEX_UNIT_SP, this.toFloat(), Resources.getSystem().displayMetrics).toInt()
    

    相关文章

      网友评论

          本文标题:Kotlin dp px 转换工具类

          本文链接:https://www.haomeiwen.com/subject/rkqbpftx.html