Je voulais créer une notification comprenant certains contrôles. Étant donné que le texte et les contrôles sont petits avec une taille de notification par défaut (64dp), je voulais qu'il soit plus grand que la taille par défaut.
Il est possible de créer des notifications plus importantes, et je pense qu'il est également possible d'avoir une mise en page personnalisée, mais je ne sais pas comment.
Pour être plus précis, la capture d'écran suivante montre la notification de spotify (prise d'image de ici ):
Comme vous pouvez le voir, la taille est supérieure à celle par défaut. De plus, il a une sorte de boutons Image sans texte - si vous utilisez Notification.Builder.addAction () , vous pouvez fournir une icône mais aussi besoin de fournir une CharSequence comme description - si vous laissez la description vide, il y aura toujours de l'espace réservé pour le texte et si vous passez null , il va planter.
Quelqu'un peut-il me dire comment créer une grosse notification avec une mise en page personnalisée?
Merci
Mise à jour en raison de modifications de l'API:
À partir de l'API 24, le Notification.Builder
Contient une méthode setCustomBigContentView (RemoteViews) -. Le NotificationCompat.Builder (qui fait partie du package support.v4) contient également cette méthode.
Veuillez noter que la documentation de NotificationCompat.Builder.setCustomBigContentView indique:
Fournissez des RemoteViews personnalisés à utiliser à la place du modèle de plateforme dans le formulaire développé. Cela remplacera la disposition développée qui serait autrement construite par cet objet Builder. Aucune opération sur les versions antérieures à JELLY_BEAN.
Par conséquent, cela ne fonctionnera également que pour l'API> = 16 (JELLY_BEAN).
Réponse originale
Donc, après une utilisation excessive de Google, j'ai trouvé ce tutoriel expliquant comment utiliser les grandes dispositions personnalisées. L'astuce n'est pas d'utiliser setStyle()
mais de définir manuellement le champ bigContentView
du Notification
après l'avoir construit . Cela semble un peu hacky, mais voici ce que j'ai finalement trouvé:
notification_layout_big.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="match_parent"
Android:layout_height="100dp" <!-- This is where I manually define the height -->
Android:orientation="horizontal" >
<!-- some more elements.. -->
</LinearLayout>
Construire Notification
dans le code:
Notification foregroundNote;
RemoteViews bigView = new RemoteViews(getApplicationContext().getPackageName(),
R.layout.notification_layout_big);
// bigView.setOnClickPendingIntent() etc..
Notification.Builder mNotifyBuilder = new Notification.Builder(this);
foregroundNote = mNotifyBuilder.setContentTitle("some string")
.setContentText("Slide down on note to expand")
.setSmallIcon(R.drawable.ic_stat_notify_white)
.setLargeIcon(bigIcon)
.build();
foregroundNote.bigContentView = bigView;
// now show notification..
NotificationManager mNotifyManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
mNotifyManager.notify(1, foregroundNote);
Modifier
Comme indiqué par chx101, cela ne fonctionne que pour API> = 16. Je ne l'ai pas mentionné dans cette réponse, mais il a été mentionné dans le tutoriel lié ci-dessus:
Les notifications étendues ont été introduites pour la première fois dans Android 4.1 JellyBean [API 16].