我正在开发Android Launcher应用程序。我可以托管AppWidgets并将其显示在我的View上,该View派生自LinearLayout。我无法弄清楚如何将焦点设置到窗口小部件中的按钮(例如,Power Control窗口小部件的各个控件),就像默认启动器一样。
这就是我将焦点分配给AppWidgetHostView的方式:
widgetView.setFocusable(true);
widgetView.setSelected(true);
widgetView.requestFocus(true);
整个小部件都有焦点。我知道这是因为如果单击dpad enter按钮,整个小部件会闪烁。
如何将焦点设置到窗口小部件中的某个按钮?我是否需要枚举小部件的RemoteView?如果是这样,怎么样?
答案 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();
}