Изменение размеров экрана с помощью контейнера Conformant
Скрытие индикатора
Для отображения индикатора в верхней части экрана (полоска состояния) вам потребуется использовать контейнер Conformant. Вы можете скрыть индикатор даже если контейнер существует. Контейнер Conformant также необходим для изменения размера экрана при появлении новой панели, такой как keypad.
Создайте новый проект 'ConformantSample.' Откройте файл исходного кода conformantsample.c и добавьте функцию my_box_pack перед функцией create_base_gui(). Мы уже использовали эту функцию в предыдущих примерах.
static void my_box_pack(Evas_Object *box, Evas_Object *child, double h_weight, double v_weight, double h_align, double v_align) { /* create a frame we shall use as padding around the child widget */ Evas_Object *frame = elm_frame_add(box); /* use the medium padding style. there is "pad_small", "pad_medium", * "pad_large" and "pad_huge" available as styles in addition to the * "default" frame style */ elm_object_style_set(frame, "pad_medium"); /* set the input weight/aling on the frame insted of the child */ evas_object_size_hint_weight_set(frame, h_weight, v_weight); evas_object_size_hint_align_set(frame, h_align, v_align); { /* tell the child that is packed into the frame to be able to expand */ evas_object_size_hint_weight_set(child, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); /* fill the expanded area (above) as opposaed to center in it */ evas_object_size_hint_align_set(child, EVAS_HINT_FILL, EVAS_HINT_FILL); /* actually put the child in the frame and show it */ evas_object_show(child); elm_object_content_set(frame, child); } /* put the frame into the box instead of the child directly */ elm_box_pack_end(box, frame); /* show the frame */ evas_object_show(frame); }
Добавьте кнопку, скрывающую индикатор. Для этого нужно в конце функции create_base_gui() добавить следующий код.
/* Conformant */ ad->conform = elm_conformant_add(ad->win); elm_win_indicator_mode_set(ad->win, ELM_WIN_INDICATOR_SHOW); elm_win_indicator_opacity_set(ad->win, ELM_WIN_INDICATOR_OPAQUE); evas_object_size_hint_weight_set(ad->conform, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); elm_win_resize_object_add(ad->win, ad->conform); evas_object_show(ad->conform); { /* child object - indent to how relationship */ /* A box to put things in verticallly - default mode for box */ Evas_Object *box = elm_box_add(ad->win); evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); elm_object_content_set(ad->conform, box); evas_object_show(box); { /* Label*/ ad->label = elm_label_add(ad->conform); elm_object_text_set(ad->label, "Using of Conformant Container"); my_box_pack(box, ad->label, 1.0, 0.0, -1.0, 0.5); /* Button-1 */ Evas_Object *btn = elm_button_add(ad->conform); elm_object_text_set(btn, "Hide the indicator"); evas_object_smart_callback_add(btn, "clicked", btn_hide_cb, ad); my_box_pack(box, btn, 1.0, 1.0, -1.0, -1.0); } } /* Show window after base gui is set up */ evas_object_show(ad->win);
Далее, нам потребуется обработчик нажатия кнопки, скрывающей индикатор. Добавьте выше функции create_base_gui() следующий код.
static void btn_hide_cb(void *data, Evas_Object *obj, void *event_info) { appdata_s *ad = (appdata_s*)data; elm_win_indicator_mode_set(ad->win, ELM_WIN_INDICATOR_HIDE); }
elm_win_indicator_mode_set() - это API, который изменяет ежим работы индикатора. В качестве первого параметра используйте объект Window. App может иметь только отдельное окно. В качестве второго параметра используется тип режима. Параметр ELM_WIN_INDICATOR_HIDE скрывает индикатор.
Запустите пример. Убедитесь, что при нажатии на кнопку индикатор исчезает.
Отображение индикатора
Далее, мы реализуем возможность отображение ранее скрытого индикатора. Для этого нам потребуется добавить код новой кнопки в конце функции create_base_gui() function.
/* Button-1 */ Evas_Object *btn = elm_button_add(ad->conform); elm_object_text_set(btn, "Hide"); evas_object_smart_callback_add(btn, "clicked", btn_hide_cb, ad); my_box_pack(box, btn, 1.0, 1.0, -1.0, -1.0); /* Button-2 */ btn = elm_button_add(ad->conform); elm_object_text_set(btn, "Show the indicator"); evas_object_smart_callback_add(btn, "clicked", btn_show_cb, ad); my_box_pack(box, btn, 1.0, 1.0, -1.0, -1.0); } }
Добавим код обработчика нажатия кнопки выше функции create_base_gui().
static void btn_show_cb(void *data, Evas_Object *obj, void *event_info) { appdata_s *ad = (appdata_s*)data; elm_win_indicator_mode_set(ad->win, ELM_WIN_INDICATOR_SHOW); }
Запустите пример. Убедитесь в том, что индикатор можно скрывать и снова делать видимым.
Создание элемента управления Entry
Entry — это элемент управления, используемый для ввода и редактирования текста пользователем. В силу того, что для ввода текста используется keypad, требуется изменение размера экрана. Для этого нам потребуется добавить другой контейнер, такой как Box или Layout в верхнюю часть контейнера Conformant, после чего добавить Entry поверх вновь созданного контейнера. Перейдите в функцию create_base_gui() и добавьте код создания контрола Entry.
/* Button-2 */ btn = elm_button_add(ad->conform); elm_object_text_set(btn, "Show"); evas_object_smart_callback_add(btn, "clicked", btn_show_cb, ad); my_box_pack(box, btn, 1.0, 1.0, -1.0, -1.0); /* Entry */ Evas_Object *entry = elm_entry_add(ad->conform); elm_object_text_set(entry, "Entry"); my_box_pack(box, entry, 1.0, 1.0, -1.0, -1.0); }
elm_entry_add() - это API, который создает элемент управления Entry. Мы создали Entry в верхней части контейнера Conformant. Запустите проект. Убедитесь, что все работает нормально.