AppWidgetHost如何将焦点设置为AppWidget按钮?

时间:2011-03-04 18:57:06

标签: android android-widget android-appwidget

我正在开发Android Launcher应用程序。我可以托管AppWidgets并将其显示在我的View上,该View派生自LinearLayout。我无法弄清楚如何将焦点设置到窗口小部件中的按钮(例如,Power Control窗口小部件的各个控件),就像默认启动器一样。

这就是我将焦点分配给AppWidgetHostView的方式:

widgetView.setFocusable(true);
widgetView.setSelected(true);
widgetView.requestFocus(true);

整个小部件都有焦点。我知道这是因为如果单击dpad enter按钮,整个小部件会闪烁。

如何将焦点设置到窗口小部件中的某个按钮?我是否需要枚举小部件的RemoteView?如果是这样,怎么样?

1 个答案:

答案 0 :(得分:3)

我明白了。 (谢谢HierarchyViewer)。如果AppWidgetHostView第一个子节点是ViewGroup(例如LinearLayout),我会从小部件中移除焦点并使用FocusFinder将焦点分配给第一个子节点。

View view = getView(); // from AppWidgetHost().createView
ViewGroup hostView;
if ( !(view instanceof ViewGroup) )
    return;             // hostView does not a child widget!
hostView = (ViewGroup) view;
View widget = hostView.getChildAt(0);
if ( !(widget instanceof ViewGroup) ) 
    return;             // widget does not have children
hostView.setFocusable(false);
hostView.setSelected(false);

// select first child
FocusFinder focusFinder = FocusFinder.getInstance();
View nextView = focusFinder.findNextFocus(hostView, null, View.FOCUS_RIGHT);
if (nextView != null) {
    nextView.setSelected(true);
    nextView.requestFocus();
}