我正在使用新的Notification.MediaStyle类向FTP流式音乐播放器应用实施Lollipop式通知。我将专辑封面设为我的"大图标"。
鉴于专辑封面直接取自当前播放的文件,此专辑封面的大小取决于来源(可能高达5000x5000)。
根据我的棒棒糖前代码,我在最大尺寸下解码位图:
android.R.dimen.notification_large_icon_width
和
android.R.dimen.notification_large_icon_height
效果很好,因为解码时间快得多,内存使用也很理想。
但是,当此代码应用于我的MediaStyle样式时,展开的视图会使用比尺寸参数定义的图标大得多的图标,从而在展开时产生模糊的专辑封面。
是否有一些常量来定义MediaStyle大图标的展开视图的最大大小?或者这个问题有一些解决方法吗?目前的情况是,艺术以全分辨率解码是不可接受的,因为它可能会导致应用程序因OOM而崩溃。
答案 0 :(得分:4)
从Lollipop源代码我可以看到图像大小为128dp,请参阅notification_template_material_big_media.xml on GitHub:
<!-- Layout to be used with only max 3 actions. It has a much larger picture at the left side-->
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/status_bar_latest_event_content"
android:layout_width="match_parent"
android:layout_height="128dp"
android:background="#00000000"
android:tag="bigMediaNarrow"
>
<ImageView android:id="@+id/icon"
android:layout_width="128dp"
android:layout_height="128dp"
android:scaleType="centerCrop"
/>
<!-- ...Nothing interesting for us futher... -->
</RelativeLayout>
这适用于具有3个或更少操作按钮的扩展布局。展望Notification.MediaStyle.getBigLayoutResource(int) on GrepCode,如果有更多按钮,则会使用notification_template_material_big_media.xml:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/status_bar_latest_event_content"
android:layout_width="match_parent"
android:layout_height="128dp"
android:background="#00000000"
android:tag="bigMedia"
>
<include layout="@layout/notification_template_icon_group"
android:layout_width="@dimen/notification_large_icon_width"
android:layout_height="@dimen/notification_large_icon_height"
/>
<!-- ...Nothing interesting for us futher... -->
</RelativeLayout>
而notification_template_icon_group.xml看起来像这样:
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:internal="http://schemas.android.com/apk/prv/res/android"
android:layout_width="@dimen/notification_large_icon_width"
android:layout_height="@dimen/notification_large_icon_height"
android:id="@+id/icon_group"
>
<ImageView android:id="@+id/icon"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="12dp"
android:layout_marginBottom="12dp"
android:layout_marginStart="12dp"
android:layout_marginEnd="12dp"
android:scaleType="centerInside"
/>
<ImageView android:id="@+id/right_icon"
android:layout_width="16dp"
android:layout_height="16dp"
android:padding="3dp"
android:layout_gravity="end|bottom"
android:scaleType="centerInside"
android:visibility="gone"
android:layout_marginEnd="8dp"
android:layout_marginBottom="8dp"
/>
</FrameLayout>
您可以在.../res/values/dimens.xml中找到notification_large_icon_width
和notification_large_icon_height
:
<!-- The width of the big icons in notifications. -->
<dimen name="notification_large_icon_width">64dp</dimen>
<!-- The width of the big icons in notifications. -->
<dimen name="notification_large_icon_height">64dp</dimen>
所以最后的答案 - 扩展布局为128dp,有3个或更少的动作按钮,如果有超过3个则为64dp。