2009-12-07 2 views
9

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

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

Благодаря

ответ

8

Вы должны выбрать макет, когда вы строите свой 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); 

} 
+0

так его layoutID, что мне нужно? Я заметил, что метод updateAppWidget не использует его. –

+0

извините - я пропустил линию; исправлено это. Вам нужно создать новый RemoteViews с именем пакета и идентификатором макета для перехода на updateAppWidget. –

2

Thanks Yoni.

Просто хотел добавить код. При получении объекта 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); 
+2

правый. извините, я случайно ударил несколько строк при копировании с моего кода. исправлено это. –

+0

@YoniSamlan я успешно меняю макет, но после изменения виджет виджета не работает ... – Prashant09

+0

@ Prashant09 использование swith кейс – Ranjit

Смежные вопросы