2009-12-07 11 views
9

Digamos que tengo dos diseños para un widget: Layout1 y Layout2. El valor predeterminado para el widget es Diseño1, pero le permito al usuario elegir qué diseño quieren que sea el widget. Entonces, si el usuario cambia a Layout2, ¿cómo cambio programáticamente el diseño a Layout2?Cambio del diseño de widgets mediante programación

No hay un método setContentView para widgets como lo hay para Actividades.

Gracias

Respuesta

8

Tienes que elegir el diseño cuando usted está construyendo su RemoteView. En mi código de 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

también lo es que la layoutID que necesito? Noté que el método updateAppWidget no lo usa. –

+0

lo siento, me perdí una línea; arregló eso. Lo que necesita es crear un nuevo RemoteViews con el nombre del paquete y el ID de diseño para pasar a updateAppWidget. –

2

Gracias Yoni.

Solo quería agregar a su código. Al obtener el objeto RemoteViews, usted especifica el Contexto y la Identificación del Diseño. Aquí es donde establece qué diseño desea mostrar.

Por ejemplo ...

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 la derecha. lo siento, accidentalmente destruí algunas líneas al copiar de mi código. arreglado eso. –

+0

@YoniSamlan cambio correctamente el diseño, pero después de cambiar el widget de diseño, haga clic en no funcionar ... – Prashant09

+0

@ Prashant09 use swith caso – Ranjit

Cuestiones relacionadas