.. _lv_tabview:

=====================
Tab View (lv_tabview)
=====================


Overview
********

The Tab View Widget can be used to organize content in tabs. The Tab
View is built from other Widgets:

- Main container: :ref:`base_widget`
- Tab buttons: an :ref:`base_widget` with :ref:`lv_button`
- Container for the tabs: :ref:`base_widget`
- Content of the tabs: :ref:`base_widget`

The tab buttons can be positioned on the top, bottom, left, and right
side of the Tab View.

A new tab can be selected either by clicking on a tab button or by
sliding horizontally on the content.



.. _lv_tabview_parts_and_styles:


Parts and Styles
****************

There are no special parts on the Tab View but the :ref:`base_widget` and
:ref:`lv_button` Widgets are used to create the Tab View.



.. _lv_tabview_usage:

Usage
*****

Creating a Tab View
-------------------

:cpp:expr:`lv_tabview_create(parent)` creates a new empty Tab View.

Adding tabs
-----------

New tabs can be added with :cpp:expr:`lv_tabview_add_tab(tabview, "Tab name")`.
This will return a pointer to a :ref:`base_widget` where
the tab's content can be created.

Renaming tabs
-------------

A tab can be renamed with
:cpp:expr:`lv_tabview_rename_tab(tabview, tab_id, "New Name")`.

Navigating to a new tab
-----------------------

To select a new tab you can:

- Click on its tab button
- Slide horizontally
- Use :cpp:expr:`lv_tabview_set_active(tabview, tab_id, LV_ANIM_ON / OFF)` function


Setting tab bar position
------------------------

Using the :cpp:expr:`lv_tabview_set_tab_bar_position(tabview, LV_DIR_LEFT/RIGHT/TOP/BOTTOM)`
the tab bar can be moved to any side.

Setting tab bar size
--------------------

The size of the tab bar can be adjusted by :cpp:expr:`lv_tabview_set_tab_bar_size(tabview, size)`.
When tabs are on the top or bottom, this means the height of the tab bar, and when
they are on the sides, it means the width.

Accessing the parts
-------------------

- :cpp:expr:`lv_tabview_get_content(tabview)` returns a pointer to the container for
  tabs content (a :ref:`base_widget`)
- :cpp:expr:`lv_tabview_get_tab_bar(tabview)` returns a pointer to the container for
  tab buttons (a :ref:`base_widget`)



.. _lv_tabview_events:

Events
******

-  :cpp:enumerator:`LV_EVENT_VALUE_CHANGED` Sent when a new tab is selected by sliding
   or clicking the tab button. :cpp:expr:`lv_tabview_get_tab_active(tabview)`
   returns the zero based index of the current tab.

.. admonition::  Further Reading

    Learn more about :ref:`lv_obj_events` emitted by all Widgets.

    Learn more about :ref:`events`.



.. _lv_tabview_keys:

Keys
****

Keys have effect only on the tab buttons.
Programmatically add these buttons to a group if required.

.. admonition::  Further Reading

    Learn more about :ref:`indev_keys`.



.. _lv_tabview_example:

Example
*******

.. include:: ../../examples/widgets/tabview/index.rst



.. _lv_tabview_api:

API
***
