2009-12-07 26 views
9

Supponiamo di disporre di due layout per un widget: Layout1 e Layout2. L'impostazione predefinita per il widget è Layout1, ma consento all'utente di scegliere quale layout devono essere il widget. Quindi, se l'utente cambia in Layout2, come posso modificare a livello di programmazione il layout in Layout2?Modifica layout widget a livello di programmazione

Non esiste un metodo setContentView per i widget come per le attività.

Grazie

risposta

8

si deve scegliere il layout quando si sta costruendo il vostro remoteview. Nel mio codice di widget:

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

così è la layoutID che ho bisogno? Ho notato che il metodo updateAppWidget non lo usa. –

+0

scusa - ho perso una linea; risolto quello. Quello di cui hai bisogno è creare una nuova RemoteViews con il nome del pacchetto e l'id del layout da passare ad updateAppWidget. –

2

Grazie Yoni.

Volevo solo aggiungere al tuo codice. Quando si ottiene l'oggetto RemoteViews, si specifica il contesto e l'ID del layout. Qui è dove si imposta quale layout si desidera mostrare.

Per esempio ...

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

a destra. scusa, ho accidentalmente messo a fuoco alcune righe durante la copia dal mio codice. risolto. –

+0

@YoniSamlan ho cambiato con successo il layout, ma dopo aver modificato il widget di layout, non funziona ... – Prashant09

+0

@ Prashant09 usa swith – Ranjit

Problemi correlati