Изменение макета виджетов программно

Предположим, что у меня есть два макета для виджета: Layout1 и Layout2. По умолчанию для виджета является Layout1, но я разрешаю пользователю выбирать, какой макет им нужен, чтобы виджет был. Итак, если пользователь меняет Layout2, как мне программно изменить макет на Layout2?

Существует не метод setContentView для виджетов, например, для Activity.

благодаря

Solutions Collecting From Web of "Изменение макета виджетов программно"

Вы должны выбрать макет, когда вы создаете свой RemoteView. В моем коде виджета:

public static RemoteViews buildUpdate(Context context, String action) { RemoteViews updateViews; SharedPreferences prefs = context.getSharedPreferences(PREFS_NAME, 0); String typeface = prefs.getString("typeface", "sans"); int layoutId = R.layout.widget_sans; if ("monospace".equals(typeface)){ layoutId = R.layout.widget_mono; } else if ("serif".equals(typeface)){ layoutId = R.layout.widget_serif; } updateViews = new RemoteViews(context.getPackageName(), layoutId); //actually do things here //then finally, return our remoteView AppWidgetManager.getInstance(context).updateAppWidget( new ComponentName(context, FuzzyWidget.class), updateViews); } 

Спасибо Йони.

Просто хотел добавить к вашему коду. При получении объекта RemoteViews вы указываете Контекст и Идентификатор макета. Здесь вы указываете, какой макет вы хотите отобразить.

Например…

  RemoteViews views = null; if (1 == 1) views = new RemoteViews(m_context.getPackageName(), R.layout.Layout1); else views = new RemoteViews(m_context.getPackageName(), R.layout.Layout2); AppWidgetManager.getInstance(context).updateAppWidget( new ComponentName(context, FuzzyWidget.class), views);