В некоторых приложениях при нажатии клавиш или касании экрана необходимо предоставить пользователю обратную связь:
Поскольку AWTK сам по себе не предоставляет интерфейсы для вибрации и звука, AWTK предоставляет интерфейс ui_feedback, который позволяет разработчикам устанавливать функции обратного вызова для воспроизведения звука или вибрации.
Прототип и функция инициализации функции обратного вызова выглядят следующим образом:
/**
* @method ui_on_feedback_t
* Функция обратного вызова.
*
* @param {void*} ctx Контекст функции обратного вызова, переданный в ui_feedback_init.
* @param {widget_t*} widget Объект компонента, для которого установлен атрибут feedback.
* @param {event_t*} evt Объект события.
*
* @return {ret_t} Возвращает RET_OK в случае успеха, иначе — ошибку.
*/
typedef ret_t (*ui_on_feedback_t)(void* ctx, widget_t* widget, event_t* evt);
/**
* @method ui_feedback_init
* Инициализация.
* Устанавливает фактическую функцию обработки.
*
* @annotation ["static"]
* @param {ui_on_feedback_t} on_feedback Фактическая функция обработки.
* @param {void*} ctx Контекст функции обратного вызова.
*
* @return {ret_t} Возвращает RET_OK в случае успеха, иначе — ошибку.
*/
ret_t ui_feedback_init(ui_on_feedback_t on_feedback, void* ctx);
Обычно только часть компонентов требует предоставления обратной связи, поэтому компоненты по умолчанию не предоставляют функцию обратной связи. Необходимо установить атрибут feedback компонента в TRUE, и когда на этом компоненте происходят события нажатия клавиши (нажатие и отпускание) и события касания экрана (касание и отпускание), будет вызываться установленная разработчиком функция обратного вызова.
Разработчик может определить способ обратной связи на основе типа события, текущих настроек и других свойств компонента в функции обратного вызова.
Поскольку в AWTK нет интерфейса для вибрации или воспроизведения звука, здесь эта функция демонстрируется путём изменения текста. Реализовать вышеуказанные функциональные точки очень просто, шаги следующие:
(1) Установите атрибут «feedback» компонента «button» в файле пользовательского интерфейса равным true. Здесь необходимо установить «feedback = "true"» для кнопки «button», код выглядит следующим образом:
<window>
<button name="button" x="60%" y="60%" w="20%" h="40" text="inc" feedback="true"/>
<label name="label" x="c" y="60%" w="20%" h="40" text=""/>
</window>
(2) Вызовите интерфейс инициализации ui_feedback_init в коде C, код выглядит следующим образом:
static ret_t ui_on_btn_feedback(void* ctx, widget_t* widget, event_t* evt) {
widget_t* win = (widget_t*)ctx;
widget_t* label = widget_lookup(win, "label", TRUE);
const char* name = widget_get_prop_str(widget, WIDGET_PROP_NAME, "");
if (tk_str_eq(name, "button")) {
if (evt->type == EVT_POINTER_DOWN) {
widget_set_text_utf8(label, "point down");
} else if (evt->type == EVT_POINTER_UP) {
widget_set_text_utf8(label, "point up");
}
}
return RET_OK;
}
/* 初始化 */
ret_t home_page_init(widget_t* win, void* ctx) {
(void)ctx;
return_value_if_fail(win != NULL, RET_BAD_PARAMS);
widget_foreach(win, visit_init_child, win);
ui_feedback_init(ui_on_btn_feedback, win);
return RET_OK;
}
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )