2013-01-24 19 views
13

Sto tentando di creare una notifica molto simile a quella utilizzata dall'app "Play Music" di Google.Come creare una notifica simile all'app Play Music di Google

Play Music app notification

alcune domande che si spera che qualcuno può rispondere.

  1. Questa notifica è stata eseguita con RemoteViews personalizzate?
  2. La X per chiudere la parte widget delle API NotificationCompat.Builder? o semplicemente parte di un RemoteView personalizzato?
  3. Se sono tutte le visualizzazioni personalizzate, come è possibile impostare un RemoteView personalizzato per stati ridotti a icona e ingranditi?

risposta

10

Sì, tutto ciò viene fatto con l'ordinazione RemoteViews. Vedrai nei documenti per Notification, c'è un campo per bigContentView insieme a contentView.

+2

Grazie per la risposta. Mi sono preso un po 'di confusione finché non ho scoperto che dovevo prima creare la notifica e poi ho potuto impostare bigContentView. – Jona

+0

@Kabuko mi dà un suggerimento. Costruisco una vista grandiosa della notifica usando RemoteView per controllare la riproduzione/pausa come questo collegamento (http://stackoverflow.com/questions/14508369/how-to-create-a-notification-similar-to-play-music-app-from -google) Tutti hanno ragione ma quando faccio clic sul pulsante indietro del dispositivo e fuori dall'applicazione, l'evento click (Riproduci/Pausa/Avanti/Chiudi) non funziona. Aiutatemi. –

+0

@HelalKhan Sentitevi liberi di creare una nuova domanda con maggiori dettagli. I commenti qui non sono il posto giusto per quello però. – kabuko

1
  1. creare statusbar_expanded.xml in res/layout V16/

<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

+0

Hai bisogno di suggerimenti.Tutti hanno ragione ma quando faccio clic sul pulsante indietro del dispositivo e fuori dall'applicazione, l'evento click (Riproduci/Pausa/Avanti/Chiudi) non funziona. Aiutatemi. –

+0

thumbs up per style = "@ android: style/TextAppearance.StatusBar.EventContent.Title" Grazie amico mio. ti amo – AlAsiri

4

so che sono molto tardi per risposta, ma questo è per le persone nuove che provano le notifiche dei media.

  1. Non è necessario utilizzare RemoteViews. Ora possiamo semplicemente usare NotificationCompat.MediaStyle(). Funziona perfettamente secondo necessità e porta uniformità nell'esperienza di consumo Media.

  2. Quando si utilizzano le notifiche MediaStyle non ci sarà il pulsante X per versioni> Lollipop. Piuttosto, rendiamo la notifica eliminabile quando in stato di sospensione. In questi casi il processo da seguire è mostrato in questo link.

  3. La notifica MediaStyle ha setShowActionsInCompactView() per definire quali azioni visualizzare in modalità Compatta. Quanto segue è un frammento:

    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); 
    

Questo dovrebbe aiutare nella creazione di tutta la notifica di supporto, se necessario. Buona programmazione!

Problemi correlati