4

我正在编写一个将托管小部件的应用程序。该应用程序具有自定义视图(这可能是问题的根源)。我像这样获得 AppWidgetHostView

private AppWidgetHostView widget;
...
AppWidgetProviderInfo appWidgetInfo = mAppWidgetManager.getAppWidgetInfo(appWidgetId);
widget = mAppWidgetHost.createView(this, appWidgetId, appWidgetInfo); 
widget.setAppWidget(appWidgetId, appWidgetInfo);
mView.addWidget(widget, appWidgetInfo);

mView.addWidget() 基本上只是记住这个 AppWidgetHostView 实例,然后 mView 将它直接绘制到画布上。视觉上一切都很好 - 我可以看到实际的小部件。但问题在于对 UI 事件的反应。请告知在父视图中需要做什么才能正确触发 onClick() 等小部件中的处理程序。

笔记:

  1. 我使用了通常对点击事件做出反应的标准小部件。没有工作。

  2. 我还使用侦听器创建了自己的测试小部件(通过views.setOnClickPendingIntent(R.id.appwidget_text,pending);),如果在主屏幕上添加小部件,则成功触发onClick(),但在我的应用程序中不起作用。

  3. mView 正确检测到点击事件,我尝试在那里调用 widget.performClick(),它返回 false 表示 onClickListener 未在小部件中注册。但根据源 mAppWidgetHost.createView() 将调用 updateAppWidget 将注册其 onClick 侦听器..

请告知在哪里看。谢谢

4

1 回答 1

0

如果您的小部件不属于属于系统的真实 ViewGroup,您需要对触摸事件执行 setLocation() 以将它们与小部件应位于的位置对齐。如果不这样做,则用于查找哪个视图被触摸的视图代码将不起作用,因为 X 和 Y 值将是错误的(它们应该是相对于父视图,而不是绝对的)。

于 2010-07-13T03:34:26.357 回答