Изменение макета виджета программно - PullRequest
9 голосов
/ 07 декабря 2009

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

Для виджетов не существует метода setContentView, как для операций.

Спасибо

Ответы [ 2 ]

8 голосов
/ 07 декабря 2009

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

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);

}
2 голосов
/ 07 декабря 2009

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

Просто хотел добавить в свой код. При получении объекта 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...