Страницы

Поиск по вопросам

среда, 5 декабря 2018 г.

Как динамически создать layout для RemoteViews?

Пытаюсь в рантайме задать layout для виджета (RemoteViews). Проблема в том, что RemoteViews создается с лайаутом из хмл. Но у RemoteViews есть функция apply которая возвращает View. Идея следующая: я создаю хмл layout, который будет контейнером для нужного мне лайоута:

и в рантайме добавляю лайоут следующим образом:
//создаем лайоут в ран-тайме, добавляем ImageView, TextView и т.д. RelativeLayout layout = new RelativeLayout(_context); layout.setLayoutParams(new ViewGroup.LayoutParams(_width, _height)); layout.addView(...); layout.addView(...); layout.addView(...); ...
//создаем RemoteViews из хмл описания, которое выше (т.е. там лайут из одного FrameLayout, которому мы пытаемся добавить свою раскладку чайлдом) RemoteViews remoteViews = new RemoteViews(_context.getPackageName(), R.layout.widget_wrapper); //получаем (возможно) корневое View текущей раскладки в RemoteViews FrameLayout layoutRoot = (FrameLayout)remoteViews.apply(_context, null);
//теперь пытаемся прицепить созданный layout к RemoteView layoutRoot.addView(layout); remoteViews.reapply(_context, layoutRoot); remoteViews.showNext(R.id.widgetWrapper);
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(_context); appWidgetManager.updateAppWidget(_widgetId, remoteViews);
Вроде бы есть шансы, что должно работать, но не работает. Можно ли это запустить?


Ответ

Нет, работать это не должно. RemoteViews внутри не содержит никаких views, просто id хмл-я с лайаутом, а apply, видимо, используется на стороне лаунчера, который хостит виджет. Наверное можно унаследоваться от RemoteViews и написать свою версию с блекджеком ,где поместить лайоут, созданный в рантайме. Но в принципе, я могу обойтись набором xml лайоутов подготовленных для разных расширений устройств, как обычно оно и происходит.

Комментариев нет:

Отправить комментарий