假设我有两个构件:布局1和布局2。 小部件的默认值为Layout1,但我允许用户选择 他们想要小部件的布局。因此,如果用户更改为 布局2,如何以编程方式将布局更改为布局2?以编程方式更改构件布局
对于小部件来说,没有像活动一样的setContentView方法。
谢谢
假设我有两个构件:布局1和布局2。 小部件的默认值为Layout1,但我允许用户选择 他们想要小部件的布局。因此,如果用户更改为 布局2,如何以编程方式将布局更改为布局2?以编程方式更改构件布局
对于小部件来说,没有像活动一样的setContentView方法。
谢谢
您必须在构建remoteView时选择布局。在我的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);
}
谢谢Yoni。
只是想添加到您的代码。获取RemoteViews对象时,可以指定上下文和布局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);
没错。对不起,我从我的代码复制时不小心抹了几行。修好了。 – 2009-12-07 18:00:34
@YoniSamlan我成功更改了布局,但更改后布局小部件点击不起作用... – Prashant09 2013-05-18 13:51:31
@ Prashant09使用swith 案例 – Ranjit 2014-04-23 16:42:32
所以是我需要的layoutID?我注意到updateAppWidget方法没有使用它。 – 2009-12-07 17:39:43
对不起 - 我错过了一条线;固定的。您需要的是使用包名称和布局ID将新的RemoteViews传递到updateAppWidget。 – 2009-12-07 18:02:38