Как AppWidgetHost устанавливает фокус на кнопку AppWidget? - PullRequest
2 голосов
/ 04 марта 2011

Я работаю над приложением для запуска Android. Я могу разместить AppWidgets и отобразить их в своем View, который получен из LinearLayout. Я не могу понять, как установить фокус на кнопки в виджете (например, отдельные элементы управления виджета «Управление питанием»), как это происходит со средством запуска по умолчанию.

Вот как я назначаю фокус для AppWidgetHostView:

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

Весь виджет имеет фокус. Я знаю это, потому что весь виджет мигает, если я нажимаю кнопку ввода dpad.

Как установить фокус на одну из кнопок в виджете? Нужно ли перечислять RemoteViews виджета? Если да, то как?

1 Ответ

3 голосов
/ 10 марта 2011

Я понял это.(Спасибо, 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();
}
...