Пытаюсь в рантайме задать 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 лайоутов подготовленных для разных расширений устройств, как обычно оно и происходит.
Комментариев нет:
Отправить комментарий