一、背景
当需要在pad和手机上做不同的适配的时候就需要判断一个设备是否为pad,那么如何判断一个设备是pad就成了需要解决的问题。
二、解决方案
- 根据屏幕最小宽度判断是否为pad,例如把最小宽度大于550dp的设备标示为pad小于550dp的设备标示为手机。
- 根据最小宽度选择出来的设备有时是手机(例如小米max系列)这时就需要从打电话维度来判断是否为pad。
三、代码实现
1、首先创建一个一下三个维度的资源文件夹,在小于550dp的dimens.xml中device_pad_value设置为0,在大于等于550dp的dimens.xml中device_pad_value设置为1,这样就可以根据Android系统的资源适配方案区别出来最小宽度大于550dp的设备了。
示例:
//480dp
<resources>
<!--用于判断是否是pad-->
<dimen name="device_pad_value">0px</dimen>
</resources>
//550dp
<resources>
<!--用于判断是否是pad-->
<dimen name="device_pad_value">1px</dimen>
</resources>
//720dp
<resources>
<!--用于判断是否是pad-->
<dimen name="device_pad_value">1px</dimen>
</resources>
2、然后根据是否可以打电话来过滤大于550dp的手机
/**
* 判断当前设备是手机还是平板
*
* @return 平板返回 True,手机返回 False
*/
fun isPad(context: Context): Boolean {
//根据屏幕最小宽度判断是否为pad,手机的padValue为0
val padValue = context.resources.getDimensionPixelSize(R.dimen.device_pad_value)
if (padValue <= 0) {
//根据屏幕最小宽度判断出是手机后再根据是否可以打电话过滤pad
val telephony = context.getSystemService(Context.TELEPHONY_SERVICE) as TelephonyManager
return telephony.phoneType == TelephonyManager.PHONE_TYPE_NONE
}
return true
}