Currently Trying to make some Lvgl Code that is Portable across different resolution Devices.
Using Percentages instead of fixed Height/Widths.
Have 2 working Examples, but finding filling the Screen width in one case is a Problem.
My two Examples look Like this:-
And This:-
The first one Is fine, but it’s using 2 objects, one for each row of buttons.
The second has all the buttons in one object,
but if I try & use flex_grow, I end up with 8 buttons on a single row.
Can I work around this, or do I just need to stay with the two objects?
The two different Code blocks are as follows.
Edit: I’ve Tried Fine Tuning the Width %, without much Luck,
Have Also Tried using:
min_width: 23%
max_width: 25%
On the Assumption that that might of restricted to Flex_grow that was applied to each button.
Top Image:-
#----- TV Page --------------------------------------------------------------------------------------------
lvgl:
pages:
- id: Right_Tv
bg_color: BLACK
scrollable: "OFF"
widgets:
- obj:
align: TOP_MID
styles: header_footer
widgets:
- label:
text: "\U000F0606 ESPHome Bbq TV \U000F0606"
align: CENTER
text_align: CENTER
text_color: WHITE
text_font: roboto_24
#----- Container for 1st Row Channel Buttons
- obj:
pad_all: 0
bg_color: GREEN
bg_opa: 35%
border_color: RED # Was CYAN for Testing.
border_opa: 50%
align: TOP_MID
bg_grad_dir: NONE
width: 100%
height: 25%
y: 50
layout:
type: FLEX
flex_flow: ROW
flex_align_cross: STRETCH # Was CENTER
text_align: CENTER
text_font: roboto_icons_36
scrollbar_mode: "OFF"
scrollable: false
widgets:
- button:
id: Ch_1
height: 100%
flex_grow: 1
widgets:
- label:
text: "ABC HD\n20"
styles: s_rlybtn
checked:
styles: s_rlybtn_ck
on_click: # on_press Triggers Immediately, on_click Triggers on Release if within defined time frame
- homeassistant.action:
action: media_player.play_media
data:
entity_id: media_player.ai_pont
media_content_id: "20"
media_content_type: "channel"
- button:
id: Ch_2
height: 100%
flex_grow: 1
widgets:
- label:
text: "ABC News\n24"
styles: s_rlybtn
checked:
styles: s_rlybtn_ck
on_click: # on_press Triggers Immediately, on_click Triggers on Release if within defined time frame
- homeassistant.action:
action: media_player.play_media
data:
entity_id: media_player.ai_pont
media_content_id: "24"
media_content_type: "channel"
- button:
id: Ch_3
height: 100%
flex_grow: 1
widgets:
- label:
text: "Ten HD\n50"
styles: s_rlybtn
checked:
styles: s_rlybtn_ck
on_click: # on_press Triggers Immediately, on_click Triggers on Release if within defined time frame
# - homeassistant.service:
- homeassistant.action:
action: media_player.play_media
data:
entity_id: media_player.ai_pont
media_content_id: "50"
media_content_type: "channel"
- button:
id: Ch_4
height: 100%
flex_grow: 1
# styles: s_rlybtn
widgets:
- label:
text: "Sky News\n56"
styles: s_rlybtn
checked:
styles: s_rlybtn_ck
on_click: # on_press Triggers Immediately, on_click Triggers on Release if within defined time frame
- homeassistant.action:
action: media_player.play_media
data:
entity_id: media_player.ai_pont
media_content_id: "56"
media_content_type: "channel"
#----- Container for 2nd Row Channel Buttons
- obj:
pad_all: 0
bg_color: GREEN
bg_opa: 35%
border_color: RED # Was CYAN for Testing.
border_opa: 50%
align: TOP_MID
bg_grad_dir: NONE
width: 100%
height: 25%
y: 180
layout:
type: FLEX
flex_flow: ROW
flex_align_cross: STRETCH # Was CENTER
text_align: CENTER
text_font: roboto_icons_36
scrollbar_mode: "OFF"
scrollable: false
widgets:
- button:
id: Ch_5
height: 100%
width: 23%
flex_grow: 1
widgets:
- label:
text: "7 HD\n60"
styles: s_rlybtn
checked:
styles: s_rlybtn_ck
on_click: # on_press Triggers Immediately, on_click Triggers on Release if within defined time frame
- homeassistant.action:
action: media_player.play_media
data:
entity_id: media_player.ai_pont
media_content_id: "60"
media_content_type: "channel"
- button:
id: Ch_6
height: 100%
width: 23%
flex_grow: 1
widgets:
- label:
text: "NBN\n80"
styles: s_rlybtn
checked:
styles: s_rlybtn_ck
on_click: # on_press Triggers Immediately, on_click Triggers on Release if within defined time frame
# - homeassistant.service:
- homeassistant.action:
action: media_player.play_media
data:
entity_id: media_player.ai_pont
media_content_id: "80"
media_content_type: "channel"
- button:
id: Ch_7
height: 100%
width: 23%
flex_grow: 1
widgets:
- label:
text: "9GemHd\n85"
styles: s_rlybtn
checked:
styles: s_rlybtn_ck
on_click: # on_press Triggers Immediately, on_click Triggers on Release if within defined time frame
# - homeassistant.service:
- homeassistant.action:
action: media_player.play_media
data:
entity_id: media_player.ai_pont
media_content_id: "85"
media_content_type: "channel"
- button:
id: Ch_8
height: 100%
width: 23%
flex_grow: 1
# styles: s_rlybtn
widgets:
- label:
text: "Foxtel\n111"
styles: s_rlybtn
checked:
styles: s_rlybtn_ck
on_click: # on_press Triggers Immediately, on_click Triggers on Release if within defined time frame
- homeassistant.action:
action: media_player.play_media
data:
entity_id: media_player.ai_pont
media_content_id: "111"
media_content_type: "channel"
#----- Container for Power/Volume Buttons
- obj:
pad_all: 0
bg_color: GREEN
bg_opa: 35%
border_color: RED # Was CYAN for Testing.
border_opa: 50%
align: BOTTOM_MID
bg_grad_dir: NONE
width: 100%
height: 25%
y: -50
layout:
type: FLEX
flex_flow: ROW
flex_align_cross: STRETCH # Was CENTER
text_align: CENTER
text_font: roboto_icons_36
scrollbar_mode: "OFF"
scrollable: false
widgets:
- button:
id: Tv_pwr
height: 100%
flex_grow: 1
# styles: s_rlybtn
widgets:
- label:
text: "Power\nOn/Off"
styles: s_rlybtn
checked:
styles: s_rlybtn_ck
on_click: # on_press Triggers Immediately, on_click Triggers on Release if within defined time frame
- homeassistant.action:
action: remote.toggle
data:
entity_id: remote.ai_pont
- button:
id: Tv_vol_dn
height: 100%
flex_grow: 2
# styles: s_rlybtn
widgets:
- label:
text: "Volume\nDown"
styles: s_rlybtn
checked:
styles: s_rlybtn_ck
on_click: # on_press Triggers Immediately, on_click Triggers on Release if within defined time frame
- homeassistant.action:
action: media_player.volume_down
data:
entity_id: media_player.ai_pont
- button:
id: Tv_vol_up
height: 100%
flex_grow: 2
# styles: s_rlybtn
widgets:
- label:
text: "Volume\nUp"
styles: s_rlybtn
checked:
styles: s_rlybtn_ck
on_click: # on_press Triggers Immediately, on_click Triggers on Release if within defined time frame
- homeassistant.action:
action: media_player.volume_up
data:
entity_id: media_player.ai_pont
The Second Image:-
#----- TV Page --------------------------------------------------------------------------------------------
lvgl:
pages:
- id: Right_Tv
bg_color: BLACK
scrollable: "OFF"
widgets:
- obj:
align: TOP_MID
styles: header_footer
widgets:
- label:
text: "\U000F0606 ESPHome Bbq TV \U000F0606"
align: CENTER
text_align: CENTER
text_color: 0xFFFFFF
text_font: roboto_18
#----- Container for 1st Row Channel Buttons
- obj:
pad_all: 0
bg_color: GREEN
bg_opa: 35%
border_color: RED # Was CYAN for Testing.
border_opa: 50%
align: TOP_MID
bg_grad_dir: NONE
width: 100%
height: 50%
y: 50
layout:
type: FLEX
flex_flow: ROW_WRAP
flex_align_cross: SPACE_EVENLY # Was STRETCH
text_align: CENTER
text_font: roboto_icons_36
scrollbar_mode: "OFF"
scrollable: false
widgets:
- button:
id: Ch_1
height: 48%
width: 23.5%
flex_grow: 0
# min_width: 23%
# max_width: 25%
widgets:
- label:
text: "ABC HD\n20"
styles: s_rlybtn
checked:
styles: s_rlybtn_ck
on_click: # on_press Triggers Immediately, on_click Triggers on Release if within defined time frame
- homeassistant.action:
action: media_player.play_media
data:
entity_id: media_player.ai_pont
media_content_id: "20"
media_content_type: "channel"
- button:
id: Ch_2
height: 48%
width: 23.5%
flex_grow: 0
widgets:
- label:
text: "ABC News\n24"
styles: s_rlybtn
checked:
styles: s_rlybtn_ck
on_click: # on_press Triggers Immediately, on_click Triggers on Release if within defined time frame
- homeassistant.action:
action: media_player.play_media
data:
entity_id: media_player.ai_pont
media_content_id: "24"
media_content_type: "channel"
- button:
id: Ch_3
height: 48%
width: 23.5%
flex_grow: 0
widgets:
- label:
text: "Ten HD\n50"
styles: s_rlybtn
checked:
styles: s_rlybtn_ck
on_click: # on_press Triggers Immediately, on_click Triggers on Release if within defined time frame
# - homeassistant.service:
- homeassistant.action:
action: media_player.play_media
data:
entity_id: media_player.ai_pont
media_content_id: "50"
media_content_type: "channel"
- button:
id: Ch_4
height: 48%
width: 23.5%
flex_grow: 0
# styles: s_rlybtn
widgets:
- label:
text: "Sky News\n56"
styles: s_rlybtn
checked:
styles: s_rlybtn_ck
on_click: # on_press Triggers Immediately, on_click Triggers on Release if within defined time frame
- homeassistant.action:
action: media_player.play_media
data:
entity_id: media_player.ai_pont
media_content_id: "56"
media_content_type: "channel"
- button:
id: Ch_5
height: 48%
width: 23.5%
flex_grow: 0
widgets:
- label:
text: "7 HD\n60"
styles: s_rlybtn
checked:
styles: s_rlybtn_ck
on_click: # on_press Triggers Immediately, on_click Triggers on Release if within defined time frame
- homeassistant.action:
action: media_player.play_media
data:
entity_id: media_player.ai_pont
media_content_id: "60"
media_content_type: "channel"
- button:
id: Ch_6
height: 48%
width: 23.5%
flex_grow: 0
widgets:
- label:
text: "NBN\n80"
styles: s_rlybtn
checked:
styles: s_rlybtn_ck
on_click: # on_press Triggers Immediately, on_click Triggers on Release if within defined time frame
# - homeassistant.service:
- homeassistant.action:
action: media_player.play_media
data:
entity_id: media_player.ai_pont
media_content_id: "80"
media_content_type: "channel"
- button:
id: Ch_7
height: 48%
width: 23.5%
flex_grow: 0
widgets:
- label:
text: "9GemHd\n85"
styles: s_rlybtn
checked:
styles: s_rlybtn_ck
on_click: # on_press Triggers Immediately, on_click Triggers on Release if within defined time frame
# - homeassistant.service:
- homeassistant.action:
action: media_player.play_media
data:
entity_id: media_player.ai_pont
media_content_id: "85"
media_content_type: "channel"
- button:
id: Ch_8
height: 48%
width: 23.5%
flex_grow: 0
# styles: s_rlybtn
widgets:
- label:
text: "Foxtel\n111"
styles: s_rlybtn
checked:
styles: s_rlybtn_ck
on_click: # on_press Triggers Immediately, on_click Triggers on Release if within defined time frame
- homeassistant.action:
action: media_player.play_media
data:
entity_id: media_player.ai_pont
media_content_id: "111"
media_content_type: "channel"
#----- Container for Power/Volume Buttons
- obj:
pad_all: 0
bg_color: GREEN
bg_opa: 35%
border_color: RED # Was CYAN for Testing.
border_opa: 50%
align: BOTTOM_MID
bg_grad_dir: NONE
width: 100%
height: 25%
y: -50
layout:
type: FLEX
flex_flow: ROW
flex_align_cross: CENTER # Was STRETCH
text_align: CENTER
text_font: roboto_icons_36
scrollbar_mode: "OFF"
scrollable: false
widgets:
- button:
id: Tv_pwr
height: 100%
flex_grow: 1
# styles: s_rlybtn
widgets:
- label:
text: "Power\nOn/Off"
styles: s_rlybtn
checked:
styles: s_rlybtn_ck
on_click: # on_press Triggers Immediately, on_click Triggers on Release if within defined time frame
- homeassistant.action:
action: remote.toggle
data:
entity_id: remote.ai_pont
- button:
id: Tv_vol_dn
height: 100%
flex_grow: 2
# styles: s_rlybtn
widgets:
- label:
text: "Volume\nDown"
styles: s_rlybtn
checked:
styles: s_rlybtn_ck
on_click: # on_press Triggers Immediately, on_click Triggers on Release if within defined time frame
- homeassistant.action:
action: media_player.volume_down
data:
entity_id: media_player.ai_pont
- button:
id: Tv_vol_up
height: 100%
flex_grow: 2
# styles: s_rlybtn
widgets:
- label:
text: "Volume\nUp"
styles: s_rlybtn
checked:
styles: s_rlybtn_ck
on_click: # on_press Triggers Immediately, on_click Triggers on Release if within defined time frame
- homeassistant.action:
action: media_player.volume_up
data:
entity_id: media_player.ai_pont
Any Suggestion Appreciated.

