Notificación de pantalla de bloqueo de Android Vista personalizada con ripple y doble toque
Estoy trabajando en una aplicación de Android. Esta última hace uso de una notificación con una vista personalizada que se muestra en la pantalla de bloqueo. Desafortunadamente, no puedo obtener el efecto de ondulación y elevación cuando toco en él como otras notificaciones. Además, un solo toque dispara la intención que he configurado, mientras que otras notificaciones requieren doble toque.
He puesto un ejemplo de proyecto mínimo en Github:
- ¿Cómo posiciono el cuadro de diálogo personalizado en coordenadas específicas?
- Adición de vistas a un grupo de vistas de Android mediante programación
- ¿Cómo mover una vista en Android?
- Cómo agregar dos campos de texto de edición o vistas en un cuadro AlertDialog?
- Añadir más de dos vistas a ViewSwitcher
Https://github.com/lpellegr/android-notification-custom-example
El ejemplo de la aplicación ofrece dos botones para publicar notificaciones: uno que utiliza una vista personalizada y que padece los problemas mencionados anteriormente y otra notificación que utiliza la vista predeterminada del sistema con el comportamiento esperado.
Cualquier idea acerca de cómo obtener el efecto de ondulación y elevación, pero también el comportamiento de doble toque (manteniendo la vista personalizada) es bienvenida.
PS: Estoy apuntando a la API 19+ y quiero usar un diseño de vista personalizado para la notificación, junto con setOnClickPendingIntent ya que solo este listener permite abrir una actividad cualquiera que sea el modo de seguridad del dispositivo.
- Android: Tablerow mezclado con columnas y texto multilínea
- Android addView en hilo de fondo
- Deshabilitar todas las vistas secundarias dentro del diseño
- Android: cómo crear una aplicación de pestañas compleja con vistas
- Android instanceof detectar todos los widgets?
- Stackoverflow error en la vista
- Split motion events - acepta entradas simultáneamente a varias vistas
- Animación individual - vistas múltiples
Quite setOnClickPendingIntent
del método publishNotificationWithCustomView
y agregue setContentIntent
al constructor de notificaciones:
private void publishNotificationWithCustomView() { String title = "Notification Custom View"; String content = "No ripple effect, no elevation, single tap trigger"; Context context = getApplicationContext(); NotificationCompat.Builder builder = new NotificationCompat.Builder(context) .setWhen(System.currentTimeMillis()) .setDefaults(DEFAULT_ALL) .setSmallIcon(R.mipmap.ic_launcher) .setPriority(NotificationCompat.PRIORITY_HIGH) .setOnlyAlertOnce(true) .setAutoCancel(false) .setColor(ContextCompat.getColor(context, R.color.colorAccent)) .setContentTitle(title) .setContentText(content) .setOngoing(true) .setCategory(NotificationCompat.CATEGORY_ALARM) .setVisibility(NotificationCompat.VISIBILITY_PUBLIC) .setContentIntent(createLockscreenNotificationPendingIntent(context)); int notificationLayoutResId = R.layout.lock_screen_notification; // using folder layout-vX is having issue with LG devices if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { notificationLayoutResId = R.layout.lock_screen_notification_android_n; } RemoteViews remoteView = new RemoteViews( context.getPackageName(), notificationLayoutResId); remoteView.setTextViewText(R.id.title, title); remoteView.setTextViewText(R.id.text, content); builder.setCustomContentView(remoteView); Notification notification = builder.build(); publishNotification(context, notification, 7); }
A continuación, quite android:clickable="true"
de lock_screen_notification.xml
y lock_screen_notification_android_n.xml
:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/container" android:layout_width="match_parent" android:layout_height="64dp"> ....
- ¿Por qué el cargador de clases de Android permite un acceso reflexivo al campo público de una clase privada de paquete de otro paquete?
- Uso de Android Youtube API para reproducir secuencias en directo