Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/191.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android AppWidgetHost如何将焦点设置为AppWidget按钮?_Android_Android Widget_Android Appwidget - Fatal编程技术网

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

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); 整个小部件都有焦点。我知道

我正在开发一个Android Launcher应用程序。我可以托管AppWidget并将它们显示在我的视图上,该视图源自线性布局。我不知道如何将焦点设置到小部件中的按钮(例如,电源控制小部件的各个控件),就像默认启动器一样

以下是我将焦点分配给AppWidgetHostView的方式:

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();
}