проверьте это начало работы с- brightscript-screen-navigation
Реализация простого меню навигации На снимке экрана ниже показана целевая страница, типичная для многих каналов Roku. Компонент экрана списка - это распространенный способ реализации простых меню, управляющих перемещением по содержимому канала. Каждый элемент списка может представлять жанр видео, музыкальный стиль, группу настроек или любую другую категорию контента, которую вы хотите сгруппировать в своем канале. В обычном канале, когда выбран элемент списка, канал переходит на новый экран. В нашем примере экран со списком позволяет пользователю просматривать меню завтрака и обеда в гипотетической закусочной. При выборе одного из элементов отображается подробный список предложений для данной категории блюд.
Ключом к переходу к новому экрану при выборе элемента списка является обработка события isListItemSelected экрана списка. Индекс, возвращаемый msg.GetIndex (), содержит отсчитываемый от нуля индекс выбранного элемента списка. Ваш канал может сопоставить каждый индекс элемента списка с уникальным экраном и перейти на этот экран в ответ на событие isListItemSelected. Есть несколько способов добиться этого. Самый простой - просто использовать подход оператора if в цикле событий вызывающего экрана, который проверяет выбранный индекс и вызывает нужную функцию:
while (true)
msg = wait(0, port)
if (type(msg) = "roListScreenEvent")
if (msg.isListItemSelected())
index = msg.GetIndex()
if (index = 0)
ShowBreakfastMenu()
else if (index = 1)
ShowLunchMenu()
…
endif
endif
endif
end while
Другой более сложный, но более чистый способ сделать это - создать массив ссылок на функции.
menuFunctions = [ShowBreakfastMenu, ShowLunchMenu,…]
while (true)
msg = wait(0, port)
if (type(msg) = "roListScreenEvent")
if (msg.isListItemSelected())
menuFunctions[msg.GetIndex()]() ‘Call function based on index
endif
endif
end while
Ключ к пониманию того, как работает этот код, лежит в концепции справочника функций BrightScript. Ссылка на функцию - это просто имя данной функции. Ссылки на функции можно назначать переменным, использовать в качестве элементов массива и даже передавать другим функциям. Функция, соответствующая ссылке на функцию, может быть вызвана с помощью оператора вызова функции «()». Вот несколько примеров вызова функции doSomething по ссылке:
Function doSomething() as void
...
End Function
doSomethingReference = doSomething
‘Call doSomething by reference
doSomethingReference()
references = [doSomething, …]
«Мы также можем поместить ссылки на функции в массив ссылок0» Вызов doSomething через ссылку на функцию элемента массива. Помня об этом, давайте вернемся ко второму подходу к реализации меню на экране просмотра списка. В массиве menuFunctions содержится название каждой из функций создания экрана канала. Они расположены в том же порядке, что и элементы списка, которым они соответствуют на соответствующем экране списка. Затем, когда событие isListItemSelected обрабатывается в цикле событий экрана списка, мы берем соответствующее имя функции из массива menuFunctions. Затем функция вызывается по ссылке с использованием оператора «()» для правильного элемента массива:
menuFunctions[msg.GetIndex()]()
‘Вызов функции на основе индекса В примере канала мы используем подход ссылки на функцию. Чтобы увидеть, что на самом деле делают пункты меню, щелкните пункт меню «Завтрак», и вы увидите подробное меню завтрака, отображаемое на простом экране плаката:
При щелчке по пункту меню «Обед» отображается подробное меню обеда, которое реализовано в виде сетки:
Более глубокая навигация. До сих пор мы рассматривали, как использовать экран со списком для создания простой навигации по категориям в канале. Так же легко перейти с экранов, таких как экраны плаката или сетки выше, на другие экраны вашего канала. Просто обработайте событие isListItemSelected в цикле событий экрана, чтобы определить, когда элемент выбран, и отреагировать соответствующим образом.
В образце канала вы можете щелкнуть любой элемент на экране плаката меню завтрака, чтобы отобразить экран сведений с дополнительной информацией о выбранном элементе. Пример этого экрана (также называемого экраном «трамплин») показан ниже:
Две кнопки в правой части экрана демонстрируют другую технику навигации BrightScript. При выборе одной из этих кнопок на экране сведений появляется событие isButtonPressed. Сообщение, отправленное с событием, содержит индекс выбранной кнопки. Как и в случае с указателями элементов экрана списка, плаката и сетки, этот указатель кнопок можно использовать для управления действиями канала в ответ на нажатие кнопки, включая переход к новым экранам, открытие диалоговых окон и другие действия.
while (true)
msg = wait(0, port)
if (type(msg) = "roSpringboardScreenEvent")
if (msg.isButtonPressed())
buttonIndex = msg.GetIndex()
'Open a new screen corresponding to the button index
…
endif
endif
end while
Чтобы попытаться минимизировать размер загрузки образца канала, только элементы экрана списка завтрака и обеда открывают экраны плаката или сетки. Кроме того, можно щелкнуть только элементы экрана плаката меню завтрака, чтобы открыть экраны сведений. Вы можете легко использовать эти две категории в качестве руководства для самостоятельного создания канала. Или вы можете просто использовать код как есть, чтобы начать навигацию по своим каналам. Удачного кодирования!
person
Chanaka Weerasinghe
schedule
08.07.2019