programacion - ¿Cómo crear un diseño de notificación personalizado en Android?
programacion android pdf 2018 (4)
Este código me funcionó.
private static RemoteViews contentView; private static Notification notification; private static NotificationManager notificationManager; private static final int NotificationID = 1005; private static NotificationCompat.Builder mBuilder; private void RunNotification() { notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); mBuilder = new NotificationCompat.Builder(getApplicationContext(), "notify_001"); contentView = new RemoteViews(getPackageName(), R.layout.my_notification_layout); contentView.setImageViewResource(R.id.image, R.mipmap.ic_launcher); Intent switchIntent = new Intent(this, BackgroundService.switchButtonListener.class); PendingIntent pendingSwitchIntent = PendingIntent.getBroadcast(this, 1020, switchIntent, 0); contentView.setOnClickPendingIntent(R.id.flashButton, pendingSwitchIntent); mBuilder.setSmallIcon(R.mipmap.newicon); mBuilder.setAutoCancel(false); mBuilder.setOngoing(true); mBuilder.setPriority(Notification.PRIORITY_HIGH); mBuilder.setOnlyAlertOnce(true); mBuilder.build().flags = Notification.FLAG_NO_CLEAR | Notification.PRIORITY_HIGH; mBuilder.setContent(contentView); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { String channelId = "channel_id"; NotificationChannel channel = new NotificationChannel(channelId, "channel name", NotificationManager.IMPORTANCE_HIGH); channel.enableVibration(true); channel.setVibrationPattern(new long[]{100, 200, 300, 400, 500, 400, 300, 200, 400}); notificationManager.createNotificationChannel(channel); mBuilder.setChannelId(channelId); } notification = mBuilder.build(); notificationManager.notify(NotificationID, notification); }
este es mi diseño de notificación
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="50dp" android:background="#e9ebe9"> <ImageView android:id="@+id/flashButton" android:layout_width="180dp" android:layout_height="50dp" android:layout_alignParentRight="true" android:layout_centerVertical="true" android:layout_marginRight="-20dp" android:src="@drawable/turnoff2" /> <ImageView android:layout_width="100dp" android:layout_height="45dp" android:layout_alignParentLeft="true" android:layout_marginLeft="-10dp" android:layout_marginTop="5dp" android:layout_marginBottom="5dp" android:src="@mipmap/newicon" /> <RelativeLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerVertical="true" android:layout_marginLeft="80dp"> <TextView android:id="@+id/title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:text="Flashlight" android:textColor="#000000" android:textSize="13sp" /> <TextView android:id="@+id/charging" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/title" android:layout_alignParentLeft="true" android:layout_marginTop="3dp" android:text="90% Charging" android:textColor="#000000" android:textSize="13sp" /> </RelativeLayout> </RelativeLayout>
Espero que esto te pueda ayudar
¿Cómo mostrar el contenido completo en la notificación al primer momento en Android con el uso del estilo de notificación o necesita un diseño personalizado?
Supongo que lo que estás buscando es
.setSubText()
.
La notificación de flipkart que ha señalado definitivamente no es una vista personalizada.
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this)
.setSmallIcon(icon)
.setSubText("Limited Stocks, Don''t Wait!") <-------
.setContentTitle("Custom Notification Title")
notificationBuilder.notify(1, notificationBuilder.build());
Usé BitTextStyle () para agregar texto resaltado en la notificación.
return new NotificationCompat.Builder(context)
.setSmallIcon(R.drawable.ic_mono)
.setContentTitle(title)
.setContentText(message)
.setLargeIcon(icon)
.setColor(ContextCompat.getColor(context, R.color.notification_color))
.setStyle(new NotificationCompat.BigTextStyle().bigText(title))
.setStyle(new NotificationCompat.BigTextStyle().bigText(message).setSummaryText("#hashtag"))
.setShowWhen(true)
.setAutoCancel(true);
Use una vista de contenido personalizada en su
contentView
de notificaciones
Para definir un diseño de notificación personalizado, comience instanciando un objeto RemoteViews que infla un archivo de diseño XML. Luego, en lugar de llamar a métodos como setContentTitle (), llame a
setContent()
. Para establecer detalles de contenido en la notificación personalizada, use los métodos enRemoteViews
para establecer los valores de los elementosRemoteViews
de la vista:Cree un diseño XML para la notificación en un archivo separado. Puede usar el nombre de archivo que desee, pero debe usar la extensión .xml. En su aplicación, use los métodos
RemoteViews
para definir los iconos y el texto de sus notificaciones. Coloque este objetoRemoteViews
en suNotificationCompat.Builder
llamando a setContent () . Evite establecer un fondo dibujable en su objeto RemoteViews, porque el color del texto puede volverse ilegible.
custom_push.xml tiene mis vistas personalizadas R.id.image, R.id.text, R.id.title
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/layout"
android:layout_width="fill_parent"
android:layout_height="64dp"
android:padding="10dp" >
<ImageView
android:src="@mipmap/ic_launcher"
android:id="@+id/image"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_alignParentLeft="true"
android:layout_marginRight="10dp" />
<TextView
android:textSize="13dp"
android:textColor="#000"
android:text="Testing"
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/image"
/>
<TextView
android:textSize="13dp"
android:textColor="#000"
android:text="Testing is awecome"
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/image"
android:layout_below="@id/title"
/>
</RelativeLayout>
Instanciar un objeto RemoteViews y configurarlo,
RemoteViews contentView = new RemoteViews(getPackageName(), R.layout.custom_push);
contentView.setImageViewResource(R.id.image, R.mipmap.ic_launcher);
contentView.setTextViewText(R.id.title, "Custom notification");
contentView.setTextViewText(R.id.text, "This is a custom layout");
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this)
.setSmallIcon(R.drawable.icon)
.setContent(contentView);
Notification notification = mBuilder.build();
notification.flags |= Notification.FLAG_AUTO_CANCEL;
notification.defaults |= Notification.DEFAULT_SOUND;
notification.defaults |= Notification.DEFAULT_VIBRATE;
notificationManager.notify(1, notification);
comprobar: https://developer.android.com/guide/topics/ui/notifiers/notifications.html#ApplyStyle