Android AppWidgetHost如何将焦点设置为AppWidget按钮?
我正在开发一个Android Launcher应用程序。我可以托管AppWidget并将它们显示在我的视图上,该视图源自线性布局。我不知道如何将焦点设置到小部件中的按钮(例如,电源控制小部件的各个控件),就像默认启动器一样 以下是我将焦点分配给AppWidgetHostView的方式:Android AppWidgetHost如何将焦点设置为AppWidget按钮?,android,android-widget,android-appwidget,Android,Android Widget,Android Appwidget,我正在开发一个Android Launcher应用程序。我可以托管AppWidget并将它们显示在我的视图上,该视图源自线性布局。我不知道如何将焦点设置到小部件中的按钮(例如,电源控制小部件的各个控件),就像默认启动器一样 以下是我将焦点分配给AppWidgetHostView的方式: widgetView.setFocusable(true); widgetView.setSelected(true); widgetView.requestFocus(true); 整个小部件都有焦点。我知道
widgetView.setFocusable(true);
widgetView.setSelected(true);
widgetView.requestFocus(true);
整个小部件都有焦点。我知道这一点,因为如果我单击dpad enter按钮,整个小部件都会闪烁
如何将焦点设置为小部件中的一个按钮?我需要列举小部件的远程视图吗?如果是,怎么做?我想出来了。(感谢您的HierarchyViewer)。如果AppWidgetHostView第一个子项是一个视图组(例如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();
}