Android自定义通知在小米手机边距异常 系统默认通知边距适配咨询
小米机型自定义通知padding异常解决方法
- 原因定位:MIUI系统对
RemoteViews.setViewPadding方法做了定制化改造,传入的像素值会被系统额外乘以缩放系数,因此即使你获取到的系统边距值正常,设置后也会出现边距偏大的问题。 - 解决方案1:使用官方推荐的通知样式适配
直接使用NotificationCompat.DecoratedCustomViewStyle构建通知,系统会自动为自定义通知添加全局统一的默认边距,无需手动调用setViewPadding设置,全机型包括小米都能正常适配,示例代码如下:NotificationCompat.Builder builder = new NotificationCompat.Builder(context, channelId) .setStyle(new NotificationCompat.DecoratedCustomViewStyle()) .setCustomContentView(contentView); - 解决方案2:绕过MIUI的setViewPadding特殊处理
不使用RemoteViews提供的setViewPadding方法,改用setInt直接调用View原生的setPadding方法,避免触发MIUI的额外缩放:// 把原来的contentView.setViewPadding替换为下面的代码 contentView.setInt(R.id.notify_layout, "setPadding", padding, 0, padding, 0); - 解决方案3:小米机型特殊适配
先判断设备厂商为小米时,将获取到的padding值除以缩放系数(可通过真机测试得到通常为4~5倍)再设置:if (Build.MANUFACTURER.equalsIgnoreCase("xiaomi")) { padding = padding / 5; // 具体系数可根据真机测试调整 } contentView.setViewPadding(R.id.notify_layout, padding, 0, padding, 0);
系统dimen xml文件存储路径
Android系统框架层的公共dimen资源存储在/system/framework/framework-res.apk包内,你需要将该apk解压后,在res/values-*对应目录下可以找到dimen相关的xml文件,不同语言、分辨率、系统版本的资源会对应不同的values后缀目录。
第三方应用的dimen资源则存储在/data/app/[应用包名]/base.apk的对应资源目录中。
内容的提问来源于stack exchange,提问作者Dinh Quang Tuan
相关产品推荐
相关产品推荐

