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

Рейтинг: 5Ответов: 1Опубликовано: 10.04.2015

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

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content" android:layout_height="wrap_content"
    android:id="@+id/widgetWrapper">
</FrameLayout>

и в рантайме добавляю лайоут следующим образом:

//создаем лайоут в ран-тайме, добавляем 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);

Вроде бы есть шансы, что должно работать, но не работает. Можно ли это запустить?

Ответы

Ответов пока нет.