一、内容提要
通过Android中的屏幕像素工具来展示下使用Kotlin中的伴生对象(companion object)来替换Java中的Static关键字。在Java中我们想通过类名直接调用方法一般有两种方式一种是单例类名.getInstance().方法名。一种是通过static定义类的静态方法,通过类名.方法名来调用。如果在Kotlin中我们也想这样调用怎么办呢?其实和Java中差不多,只是用到的关键字和表现形式不一样,下面我们来看看具体怎样操作。
二、实战代码部分
/**
* 尺寸工具类
* create by yangwei
* on 2020/7/15 11:25
*/
class PxUtils {
//这两个关键字就是用来定义java中的半生对象,可以替换static关键字,根据它的名字大家应该不难
//猜测出他们的含义,“半生”,即伴随对象生伴随对象死
companion object {
/**
* 获取屏幕宽度
* @param context 上下文
* @return 屏幕宽度
*/
fun getScreenWidth(context: Context): Int {
return context.resources.displayMetrics.widthPixels;
}
/**
* 获取屏幕高度
* @param context 上下文
* @return 屏幕高度
*/
fun getScreenHeight(context: Context): Int {
return context.resources.displayMetrics.heightPixels
}
/**
* 获取设备密度
* @param context 上下文
* @return 设备密度
*/
fun getDensity(context: Context): Float {
return context.resources.displayMetrics.density
}
/**
* dp转px
* @param dpValue 密度
* @return 像素
*/
fun dp2px(dpValue: Float): Int {
val scale = getDensity(BaseApplication.i())
return (dpValue * scale + 0.5).toInt()
}
/**
* px转dp
* @param pxValue 像素值
* @return 转换后的dp值
*/
fun px2dp(pxValue: Float): Int {
val scale = getDensity(BaseApplication.i());
return (pxValue / scale + 0.5f).toInt()
}
/**
* 将sp转换为px
* @param spValue sp值
* @return 转换后的px值
*/
fun sp2px(spValue: Float): Int {
val scale = getDensity(BaseApplication.i())
return (spValue * scale + 0.5f).toInt()
}
}
}
调用方式
PxUtils.dp2px()//和Java一样的调用方式
三、解释说明
下面说下另外一种方式通过单例来通过类名.方法名来调用一个类的方法。通过object 类名{}来定义一个单例类。没错,用object关键字+类名+大括号就是一个完整的Kotlin中的单例,系统帮我们做了必要的封装,用java反编译后其代码和java单例代码一样。
在Kotlin中调用单例的方法不用像java中还需要调用一个getInstance()方法。其直接可以通过类名.方法名就可以调用了。但是有一点需要注意,如果是java调用Kotlin中的单例,则需要通过类名.INSTANCE.方法名来调用。
四、结束
结束了,喜欢记得关注,会持续分享一些移动开发的实战部分代码。
本文暂时没有评论,来添加一个吧(●'◡'●)