如何创建类似于Google的Play音乐应用的通知

时间:2013-01-24 18:37:47

标签: android

我正在尝试创建一个与Google使用的“Play Music”应用非常类似的通知。

Play Music app notification

很少有人希望有人可以回答。

  1. 此通知是否使用自定义RemoteViews完成?
  2. 是否用于关闭NotificationCompat.Builder API的小部件部分的X?或者只是自定义RemoteView的一部分?
  3. 如果是所有自定义视图,如何为最小化和最大化状态设置自定义RemoteView?

3 个答案:

答案 0 :(得分:10)

是的,所有这些都是通过自定义RemoteViews完成的。您会在Notification的文档中看到,bigContentViewcontentView都有一个字段。

答案 1 :(得分:5)

我知道我很晚才回答,但这是针对尝试媒体通知的新人。

  1. 无需使用RemoteViews。我们现在可以简单地使用NotificationCompat.MediaStyle()。它可以根据需要完美运行,并在Media消费体验中实现统一。

  2. 使用MediaStyle通知时,版本>将不会有X按钮;棒糖。相反,我们在暂停状态下使通知不可用。在这种情况下,要遵循的流程显示在此link

  3. MediaStyle通知具有setShowActionsInCompactView(),用于定义在紧凑模式下显示的所有操作。以下是一个片段:

        notificationBuilder.addAction(R.drawable.notification_play, "Play",
                    createPlayIntent());
    
        notificationBuilder.addAction(R.drawable.notification_next, "Next", createNextIntent())
                .setVisibility(NotificationCompat.VISIBILITY_PUBLIC)
                .setPriority(NotificationCompat.PRIORITY_MAX)
                .setStyle(new NotificationCompat.MediaStyle()
                        .setShowCancelButton(true)
                        .setCancelButtonIntent(createPlayIntent())
                        .setShowActionsInCompactView(0, 1, 2);
    
  4. 这可以帮助您根据需要设置整个媒体通知。快乐的编码!

答案 2 :(得分:1)

  1. 在res / layout-v16 /
  2. 中创建statusbar_expanded.xml

    <ImageView
        android:id="@+id/thumbnail"
        android:layout_width="@dimen/notification_expanded_height"
        android:layout_height="@dimen/notification_expanded_height"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:src="@drawable/notification"
        android:scaleType="fitXY" />
    
    <LinearLayout
        android:id="@+id/buttons"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentRight="true"
        android:layout_toRightOf="@id/thumbnail"
        android:divider="?android:listDivider"
        android:dividerPadding="12.0dip"
        android:gravity="center_vertical"
        android:orientation="horizontal"
        android:showDividers="middle" >
    
        <ImageButton
            android:id="@+id/prev"
            android:layout_width="0.0dip"
            android:layout_height="@dimen/play_controls_notification"
            android:layout_weight="1.0"
            android:background="?android:selectableItemBackground"
            android:padding="10.0dip"
            android:scaleType="fitCenter"
            android:src="@drawable/btn_playback_rew_jb_dark" />
    
        <ImageButton
            android:id="@+id/playpause"
            android:layout_width="0.0dip"
            android:layout_height="@dimen/play_controls_notification"
            android:layout_weight="1.0"
            android:background="?android:selectableItemBackground"
            android:padding="10.0dip"
            android:scaleType="fitCenter"
            android:src="@drawable/btn_playback_pause_jb_dark" />
    
        <ImageButton
            android:id="@+id/next"
            android:layout_width="0.0dip"
            android:layout_height="@dimen/play_controls_notification"
            android:layout_weight="1.0"
            android:background="?android:selectableItemBackground"
            android:padding="10.0dip"
            android:scaleType="fitCenter"
            android:src="@drawable/btn_playback_ff_jb_dark" />
    </LinearLayout>
    
    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="1.0px"
        android:layout_above="@id/buttons"
        android:layout_alignParentRight="true"
        android:layout_toRightOf="@id/thumbnail"
        android:background="?android:dividerHorizontal" />
    
    <ImageButton
        android:id="@+id/stop"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true"
        android:background="?android:selectableItemBackground"
        android:padding="8.0dip"
        android:src="@drawable/ic_close_notification_holo_dark" />
    
    <LinearLayout
        android:id="@+id/textarea"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_gravity="center_vertical"
        android:layout_toLeftOf="@id/stop"
        android:layout_toRightOf="@id/thumbnail"
        android:orientation="vertical"
        android:paddingLeft="@dimen/notification_padding"
        android:paddingTop="8.0dip" >
    
        <TextView
            android:id="@+id/trackname"
            style="@android:style/TextAppearance.StatusBar.EventContent.Title"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="left"
            android:ellipsize="marquee"
            android:fadingEdge="horizontal"
            android:focusable="true"
            android:singleLine="true" />
    
        <Chronometer
            android:id="@+id/duration"
            style="@android:style/TextAppearance.StatusBar.EventContent"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="left"
            android:ellipsize="marquee"
            android:layout_marginTop="6dp"
            android:fadingEdge="horizontal"
            android:maxLines="1" />
    
    </LinearLayout>
    

    2. notification.bigContentView assiginment RemoteView