Eri*_*ran 3 android android-widget appwidgetprovider
根据AppWidgetProvider中关于onAppWidgetOptionsChanged的文档:"首次放置窗口小部件时以及每次调整窗口小部件时都会调用此窗口."
但是,当我将我的小部件放在Android 4.2和4.3中的stock启动器上时,不会立即调用此方法(仅在我调整小部件后).我在我自己的应用程序上尝试过,以及CommonsWare的https://github.com/commonsguy/cw-omnibus/tree/master/AppWidget/Resize
有什么我想念的吗?
编辑:我发现的唯一一个启动器使得这种方法正常工作,如Google文档所描述的那样是Action Launcher Pro; 干得好,谢谢,Chris Lacy!为什么股票发射器不起作用?其他人有这个问题吗?
小智 7
感谢您提请注意这个问题.我将更新Android文档以反映这一点.
然而,而不是强迫到onAppWidgetOptionsChanged()中的onUpdate()的调用,我们建议的方法,如以下几点:
public class AppWidget extends AppWidgetProvider {
....
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
int[] appWidgetIds) {
super.onUpdate(context, appWidgetManager, appWidgetIds);
final int N = appWidgetIds.length;
for (int i=0; i<N; i++) {
int appWidgetId = appWidgetIds[i];
Bundle options = appWidgetManager.getAppWidgetOptions(appWidgetId);
updateWidget(context, appWidgetManager, appWidgetId, options);
}
}
public void onAppWidgetOptionsChanged (Context context, AppWidgetManager
appWidgetManager, int appWidgetId, Bundle newOptions) {
updateWidget(context, appWidgetManager, appWidgetId, newOptions);
}
private void updateWidget(Context context, AppWidgetManager appWidgetManager,
int appWidgetId, Bundle options) {
// Do whatever you need to do to the widget. Include any customization based
// on the size, included in the options. Be sure to have a graceful fallback if
// no valid size data is included in the bundle.
}
...
}
Run Code Online (Sandbox Code Playgroud)
因此,文档说明onUpdate():"... [I]如果你已经声明了一个配置Activity,那么当用户添加App Widget时,不会调用此方法,但会为后续更新调用此方法." 好吧,显然这也不是真的.调用onUpdate(),即使我为我的小部件配置了一个Activity.
无论如何,从onUpdate()调用onAppWidgetOptionsChanged()似乎是基于4.2 +的启动器的一种解决方法,因为当小部件首次放置在主屏幕上时调用onUpdate(),我们可以从AppWidgetManager实例获取Bundle appWidgetOptions.
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int appWidgetIds[]){
super.onUpdate(context, appWidgetManager, appWidgetIds);
final int N = appWidgetIds.length;
for (int i=0; i<N; i++) {
int appWidgetId = appWidgetIds[i];
Bundle options = appWidgetManager.getAppWidgetOptions(appWidgetId);
if(options!=null){
int nwidth = options.getInt(AppWidgetManager.OPTION_APPWIDGET_MIN_WIDTH);
int nheight = options.getInt(AppWidgetManager.OPTION_APPWIDGET_MIN_HEIGHT);
onAppWidgetOptionsChanged(context, appWidgetManager, appWidgetId, options);
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2225 次 |
| 最近记录: |