Добавить программно созданный макет в удаленный просмотр для уведомлений

Я разрабатываю приложение, в котором я не должен использовать пользовательский макет для 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". - почему это так, что ты делаешь, что это правда? Возможно, если бы вы могли дать немного больше понимания того, чего вы пытаетесь достичь, я бы понял вашу цель и помог вам достичь этой точки.

Другие вопросы по тегам