以编程方式更改小部件布局

时间:2009-12-07 15:59:51

标签: android widget

假设我有一个小部件的两个布局:Layout1和Layout2。 窗口小部件的默认设置是Layout1,但我允许用户选择 他们想要小部件的布局。因此,如果用户更改为 Layout2,如何以编程方式将布局更改为Layout2?

对于小部件,没有像活动那样的setContentView方法。

由于

2 个答案:

答案 0 :(得分: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);

}

答案 1 :(得分:2)

谢谢Yoni。

只是想添加到您的代码中。获取RemoteViews对象时,指定Context和Layout ID。您可以在此处设置要显示的布局。

例如......

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