This article introduces the use of GROUP widget to group and manage a series of widgets in some suitable scenarios for a more elegant code implementation.
Examples are given for the following scenarios, and we look forward to more scenarios from the community
The following screenshot shows the "Holiday Calendar" Mini Program running in the simulator.
Take a part of the interface as an example.
This part of the screen includes two IMG widgets and a TEXT widget. If I wanted to hide this whole area, how would the code do it?
const img_icon_widget = hmUI.createWidget(hmUI.widget.IMG, {
// ...
})
const img_arrow_widget = hmUI.createWidget(hmUI.widget.IMG, {
// ...
})
const text_name_widget = hmUI.createWidget(hmUI.widget.TEXT, {
// ...
})
img_icon_widget.setProperty(hmUI.prop.VISIBLE, false)
img_arrow_widget.setProperty(hmUI.prop.VISIBLE, false)
text_name_widget.setProperty(hmUI.prop.VISIBLE, false)
Need to set property hmUI.prop.VISIBLE once for each widget in this area, this code is not well maintained, use GROUP widget to transform the code.
const group_widget = hmUI.createWidget(hmUI.widget.GROUP , {
// ...
})
const img_icon_widget = group_widget.createWidget(hmUI.widget.IMG, {
// ...
})
const img_arrow_widget = group_widget.createWidget(hmUI.widget.IMG, {
// ...
})
const text_name_widget = group_widget.createWidget(hmUI.widget.TEXT, {
// ...
})
group_widget.setProperty(hmUI.prop.VISIBLE, false)
As you can see, all widgets created with GROUP are managed with GROUP, and the code is streamlined by unifying the control of showing and hiding with GROUP widget.
Note that widgets created with group.createWidget are laid out using relative coordinates, with the origin of the layout coordinate system located in the upper-left corner of the group widget.
Again, using this interface as an example, we want to trigger the function callback for each widget clicked in this area, and we usually implement the code like this
const callback = () => {
console.log('callback')
}
const img_icon_widget = hmUI.createWidget(hmUI.widget.IMG, {
// ...
})
img_icon_widget.addEventListener(hmUI.event.CLICK_DOWN, callback)
const img_arrow_widget = hmUI.createWidget(hmUI.widget.IMG, {
// ...
})
img_arrow_widget.addEventListener(hmUI.event.CLICK_DOWN, callback)
const text_name_widget = hmUI.createWidget(hmUI.widget.TEXT, {
// ...
})
text_name_widget.addEventListener(hmUI.event.CLICK_DOWN, callback)
The purpose is achieved by registering the same event for each widget. The areas marked in the figure below indicate the interactable areas that can trigger click events.
As you can observe, the interactable area is too narrow and hard to click on the watch device, resulting in a poor user experience, so the code is modified using the GROUP widget.
const callback = () => {
console.log('callback')
}
const group_widget = hmUI.createWidget(hmUI.widget.GROUP , {
// ...
})
const img_icon_widget = group_widget.createWidget(hmUI.widget.IMG, {
// ...
})
const img_arrow_widget = group_widget.createWidget(hmUI.widget.IMG, {
// ...
})
const text_name_widget = group_widget.createWidget(hmUI.widget.TEXT, {
// ...
})
group_widget.addEventListener(hmUI.event.CLICK_DOWN, callback)
Only need to register the event once and you can observe that the clickable area gets bigger!