Добавить программно созданный макет в удаленный просмотр для уведомлений
Я разрабатываю приложение, в котором я не должен использовать пользовательский макет для notification
, Вместо этого я должен использовать programmatically
созданный макет для RemoteViews
, Вот что я делаю для макета:
Notification notify = new Notification.Builder(context)
.setContentTitle("Notification")
.setLargeIcon(
decodeBase64(NotificationImages.notification_ic_stat_notify))
.build();
LinearLayout linLayout = new LinearLayout(context);
@SuppressWarnings("deprecation")
Drawable bg = new BitmapDrawable(
decodeBase64(NotificationImages.search_bg));
linLayout.setOrientation(LinearLayout.HORIZONTAL);
linLayout.setBackground(bg);
LinearLayout.LayoutParams llp = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.MATCH_PARENT);
linLayout.setLayoutParams(llp);
ImageView icon = new ImageView(context);
@SuppressWarnings("deprecation")
Drawable icon_bg = new BitmapDrawable(
decodeBase64(NotificationImages.notification_logo));
icon.setBackground(icon_bg);
LinearLayout.LayoutParams image_lp = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.WRAP_CONTENT,
LinearLayout.LayoutParams.WRAP_CONTENT);
image_lp.setMargins(20, 0, 0, 0);
image_lp.gravity = Gravity.CENTER_VERTICAL;
icon.setLayoutParams(image_lp);
linLayout.addView(icon);
Игнорировать использование base64
расшифровка, которую я делал для какой-то случайной цели. Итак, сейчас я хочу добавить это layout
в RemoteViews
для показа на notification panel
, Что-то вроде этого:
RemoteViews contentView = new RemoteViews(PACKAGE_NAME,
R.layout.persistent_notification_layout);
Как я могу заменить layout.persistent_notification_layout
из макета, созданного программно? Любая помощь будет оценена.
2 ответа
Я решил этот вопрос, предоставив не макет из файла библиотеки, а из приложения, в которое была включена библиотека. Я добавил эту функцию для создания макета уведомлений.
public void searchBar(Context context, String packageName, int layout,
String tickerText, int icon) {
Как вы можете видеть, что все здесь динамично по отношению к приложению, которое использует эту библиотеку. Макет и все остальное можно получить из самого приложения.
Давайте сделаем шаг назад, почему вы "не должны использовать пользовательский макет для уведомлений", мне не ясно, что это значит. Затем вы говорите: "Вместо этого я должен использовать программно созданный макет для RemoteViews". - почему это так, что ты делаешь, что это правда? Возможно, если бы вы могли дать немного больше понимания того, чего вы пытаетесь достичь, я бы понял вашу цель и помог вам достичь этой точки.