小米手机安卓默认通知边距
Posted
技术标签:
【中文标题】小米手机安卓默认通知边距【英文标题】:Android default notification margin of Xiaomi Phone 【发布时间】:2021-12-09 13:27:45 【问题描述】:我正在使用自定义通知并找到一种方法来根据手机的默认值设置其边距/填充。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/notification_custom_layout"
android:layout_
android:layout_
android:orientation="vertical"
</LinearLayout>
我在这里找到了一些答案:Android default notification margin
我在虚拟设备和一些手机型号(三星、OPPO、Pixel)上进行了测试,除了小米手机外,该方法似乎效果很好,填充非常大,可能比其他手机大 5-6 倍。我认为有是 setViewPadding 方法的问题,因为值 int padding = context.getResources().getDimensionPixelSize(identifier);
与其他手机没有太大区别。
如果您有任何想法,请告诉我,我在哪里可以找到系统文件夹中的 android dimen xml 文件?
RemoteViews contentView = new RemoteViews(context.getPackageName(), R.layout.my_notification_content_layout);
try
// We are assuming start and end are same. If we want to be nitty, we will get them separately, and then check which to use for left and which for righht.
int identifier = context.getResources().getIdentifier("notification_content_margin_start", "dimen", "android");
if (identifier != 0)
int padding = context.getResources().getDimensionPixelSize(identifier);
contentView.setViewPadding(R.id.notify_layout, padding, 0, padding, 0);
Log.d("setViewPadding", "Setting padding to: " + padding);
else
Log.d("setViewPadding", "Failed to find padding");
catch (Exception e)
Log.d("setViewPadding", "Failed to set padding");
【问题讨论】:
【参考方案1】:我有完全相同的问题,希望有人能回答。同时,虽然不是直接的解决方案,但以下方法可能会有所帮助。
不要使用完全自定义布局,而是如下定义DecoratedCustomView
:
builder.setStyle(new NotificationCompat.DecoratedCustomViewStyle());
这样做的目的是保留通知的系统默认标头,包括应用图标、应用名称和默认边距(在 MIUI 12 上测试)。您仍然可以像往常一样设置自定义布局:
builder.setCustomContentView(notificationLayout);
这种方法的优点是还可以获得 1:1 的系统标题(即使在 MIUI 上),同时保持自定义主布局,这是完全自定义布局很难做到的。它还消除了检查默认通知填充的需要。需要注意的其他事项:
-
这仅适用于 API24+。在 API24 之下,使用了旧的通知样式(大的全高图标),所以这个会编译,但不会像你期望的那样工作。
确保从布局中删除所有填充,以及自定义设置应用图标和应用标题,因为这些将被定义给你。
虽然这种方式不能更改通知标题(应用名称),但添加 subtitle 可能会非常方便,如下所示:
builder.setSubText("Secondary Title");
参见this 帖子中的示例
示例转换的样子。
这是完全自定义的布局(考虑到几乎可以在任何设备上完美显示,但 MIUI 除外)。
这里使用DecoratedCustomView
。可以看到 header 完全对齐(比较的热点通知),唯一的区别是应用名称不再着色。
【讨论】:
感谢您的帮助。在发布此问题之前,我已经尝试过您的解决方案。但是图标并没有像您的第一张图片那样完全显示,我必须触摸向下箭头来扩展通知以完全显示图标,这对用户来说很烦人。 如果你有向下的箭头,这意味着通知布局高度超过'small_notification'大小。尝试减小通知的大小,使其适合 android 标准尺寸(google 声称它可能小至 48dp)。 如果问题只影响 应用程序图标 而不是实际通知,很可能您的图标大小有误。确保您使用this 或类似的图标生成器来生成多个资产。一个图标是不够的。 "如果你有向下的箭头,这意味着通知布局高度超过了'small_notification'大小。尝试减小通知的大小,使其适合androids标准尺寸(谷歌声称它可能小到48dp )" -> 这对我很有帮助。 非常感谢,我将使用适合androids标准尺寸的另一种布局。以上是关于小米手机安卓默认通知边距的主要内容,如果未能解决你的问题,请参考以下文章