diff --git a/src/others/xml/lv_xml.c b/src/others/xml/lv_xml.c
index f24da584ab..40773a9ecb 100644
--- a/src/others/xml/lv_xml.c
+++ b/src/others/xml/lv_xml.c
@@ -96,6 +96,7 @@ void lv_xml_init(void)
lv_xml_widget_register("lv_tabview", lv_xml_tabview_create, lv_xml_tabview_apply);
lv_xml_widget_register("lv_tabview-tab_bar", lv_xml_tabview_tab_bar_create, lv_xml_tabview_tab_bar_apply);
lv_xml_widget_register("lv_tabview-tab", lv_xml_tabview_tab_create, lv_xml_tabview_tab_apply);
+ lv_xml_widget_register("lv_tabview-tab_button", lv_xml_tabview_tab_button_create, lv_xml_tabview_tab_button_apply);
lv_xml_widget_register("lv_chart", lv_xml_chart_create, lv_xml_chart_apply);
lv_xml_widget_register("lv_chart-cursor", lv_xml_chart_cursor_create, lv_xml_chart_cursor_apply);
lv_xml_widget_register("lv_chart-series", lv_xml_chart_series_create, lv_xml_chart_series_apply);
diff --git a/src/others/xml/parsers/lv_xml_tabview_parser.c b/src/others/xml/parsers/lv_xml_tabview_parser.c
index e1e8947b06..dc93b80570 100644
--- a/src/others/xml/parsers/lv_xml_tabview_parser.c
+++ b/src/others/xml/parsers/lv_xml_tabview_parser.c
@@ -87,6 +87,33 @@ void lv_xml_tabview_tab_apply(lv_xml_parser_state_t * state, const char ** attrs
lv_xml_obj_apply(state, attrs);
}
+void * lv_xml_tabview_tab_button_create(lv_xml_parser_state_t * state, const char ** attrs)
+{
+ lv_obj_t * tv = lv_xml_state_get_parent(state);
+ int32_t btn_cnt = lv_tabview_get_tab_count(tv);
+ if(btn_cnt == 0) {
+ LV_LOG_WARN("There are no buttons on the tab view. Get tab buttons when the tabs are already created");
+ return NULL;
+ }
+
+ const char * index_str = lv_xml_get_value_of(attrs, "index");
+ int32_t index_int = index_str ? lv_xml_atoi(index_str) : 0;
+ if(LV_ABS(index_int) >= btn_cnt) {
+ LV_LOG_WARN("tabindex is out of range, using the first tab instead");
+ index_int = 0;
+ }
+
+ void * item = lv_tabview_get_tab_button(tv, index_int);
+
+ return item;
+}
+
+void lv_xml_tabview_tab_button_apply(lv_xml_parser_state_t * state, const char ** attrs)
+{
+ /*Apply the common properties, e.g. width, height, styles flags etc*/
+ lv_xml_obj_apply(state, attrs);
+}
+
/**********************
* STATIC FUNCTIONS
**********************/
diff --git a/src/others/xml/parsers/lv_xml_tabview_parser.h b/src/others/xml/parsers/lv_xml_tabview_parser.h
index b96d6ccd92..a0860db478 100644
--- a/src/others/xml/parsers/lv_xml_tabview_parser.h
+++ b/src/others/xml/parsers/lv_xml_tabview_parser.h
@@ -30,6 +30,8 @@ void * lv_xml_tabview_tab_bar_create(lv_xml_parser_state_t * state, const char *
void lv_xml_tabview_tab_bar_apply(lv_xml_parser_state_t * state, const char ** attrs);
void * lv_xml_tabview_tab_create(lv_xml_parser_state_t * state, const char ** attrs);
void lv_xml_tabview_tab_apply(lv_xml_parser_state_t * state, const char ** attrs);
+void * lv_xml_tabview_tab_button_create(lv_xml_parser_state_t * state, const char ** attrs);
+void lv_xml_tabview_tab_button_apply(lv_xml_parser_state_t * state, const char ** attrs);
/**********************
* MACROS
diff --git a/src/widgets/tabview/lv_tabview.c b/src/widgets/tabview/lv_tabview.c
index 165d43f073..94676ebf27 100644
--- a/src/widgets/tabview/lv_tabview.c
+++ b/src/widgets/tabview/lv_tabview.c
@@ -242,6 +242,13 @@ uint32_t lv_tabview_get_tab_active(lv_obj_t * obj)
return tabview->tab_cur;
}
+lv_obj_t * lv_tabview_get_tab_button(lv_obj_t * obj, int32_t idx)
+{
+ LV_ASSERT_OBJ(obj, MY_CLASS);
+
+ return lv_obj_get_child_by_type(lv_tabview_get_tab_bar(obj), idx, &lv_button_class);
+}
+
uint32_t lv_tabview_get_tab_count(lv_obj_t * obj)
{
LV_ASSERT_OBJ(obj, MY_CLASS);
diff --git a/src/widgets/tabview/lv_tabview.h b/src/widgets/tabview/lv_tabview.h
index f9bfdcc184..911c886a96 100644
--- a/src/widgets/tabview/lv_tabview.h
+++ b/src/widgets/tabview/lv_tabview.h
@@ -88,6 +88,15 @@ uint32_t lv_tabview_get_tab_count(lv_obj_t * obj);
*/
uint32_t lv_tabview_get_tab_active(lv_obj_t * obj);
+/**
+ * Get a given tab button by index
+ * @param obj pointer to a tabview widget
+ * @param idx zero based index of the tab button to get.
+ * < 0 means start counting tab button from the back (-1 is the last tab button)
+ * @return pointer to the tab button, or NULL if the index was out of range
+ */
+lv_obj_t * lv_tabview_get_tab_button(lv_obj_t * obj, int32_t idx);
+
/**
* Get the widget where the container of each tab is created
* @param obj pointer to a tabview widget
diff --git a/xmls/lv_tabview.xml b/xmls/lv_tabview.xml
index e53cf8288a..04407eda37 100644
--- a/xmls/lv_tabview.xml
+++ b/xmls/lv_tabview.xml
@@ -16,5 +16,9 @@ Example
+
+
+
+
\ No newline at end of file