RefreshLayout#

#

Example#

from kivy.clock import Clock
from kivy.lang import Builder
from kivy.factory import Factory
from kivy.properties import StringProperty

from kivymd.app import MDApp
from kivymd.uix.button import MDIconButton
from kivymd.icon_definitions import md_icons
from kivymd.uix.list import ILeftBodyTouch, OneLineIconListItem
from kivymd.theming import ThemeManager
from kivymd.utils import asynckivy

Builder.load_string('''
<ItemForList>
    text: root.text

    IconLeftSampleWidget:
        icon: root.icon


<Example@MDFloatLayout>

    MDBoxLayout:
        orientation: 'vertical'

        MDTopAppBar:
            title: app.title
            md_bg_color: app.theme_cls.primary_color
            background_palette: 'Primary'
            elevation: 4
            left_action_items: [['menu', lambda x: x]]

        MDScrollViewRefreshLayout:
            id: refresh_layout
            refresh_callback: app.refresh_callback
            root_layout: root
            spinner_color: "brown"
            circle_color: "white"

            MDGridLayout:
                id: box
                adaptive_height: True
                cols: 1
''')


class IconLeftSampleWidget(ILeftBodyTouch, MDIconButton):
    pass


class ItemForList(OneLineIconListItem):
    icon = StringProperty()


class Example(MDApp):
    title = 'Example Refresh Layout'
    screen = None
    x = 0
    y = 15

    def build(self):
        self.theme_cls.theme_style = "Dark"
        self.theme_cls.primary_palette = "Orange"
        self.screen = Factory.Example()
        self.set_list()

        return self.screen

    def set_list(self):
        async def set_list():
            names_icons_list = list(md_icons.keys())[self.x:self.y]
            for name_icon in names_icons_list:
                await asynckivy.sleep(0)
                self.screen.ids.box.add_widget(
                    ItemForList(icon=name_icon, text=name_icon))
        asynckivy.start(set_list())

    def refresh_callback(self, *args):
        '''
        A method that updates the state of your application
        while the spinner remains on the screen.
        '''

        def refresh_callback(interval):
            self.screen.ids.box.clear_widgets()
            if self.x == 0:
                self.x, self.y = 15, 30
            else:
                self.x, self.y = 0, 15
            self.set_list()
            self.screen.ids.refresh_layout.refresh_done()
            self.tick = 0

        Clock.schedule_once(refresh_callback, 1)


Example().run()

API - kivymd.uix.refreshlayout.refreshlayout#

class kivymd.uix.refreshlayout.refreshlayout.MDScrollViewRefreshLayout(*args, **kwargs)#

Refresh layout class.

For more information, see in the ThemableBehavior and MDScrollView class documentation.

root_layout#

The spinner will be attached to this layout.

root_layout is a ObjectProperty and defaults to None.

refresh_callback#

The method that will be called at the on_touch_up event, provided that the overscroll of the list has been registered.

refresh_callback is a ObjectProperty and defaults to None.

spinner_color#

Color of the spinner in (r, g, b, a) or string format.

New in version 1.2.0.

spinner_color is a ColorProperty and defaults to [1, 1, 1, 1].

circle_color#

Color of the ellipse around the spinner in (r, g, b, a) or string format.

New in version 1.2.0.

circle_color is a ColorProperty and defaults to None.

show_transition#

Transition of the spinner’s opening.

New in version 1.2.0.

show_transition is a StringProperty and defaults to ‘out_elastic’.

show_duration#

Duration of the spinner display.

New in version 1.2.0.

show_duration is a NumericProperty and defaults to 0.8.

hide_transition#

Transition of hiding the spinner.

New in version 1.2.0.

hide_transition is a StringProperty and defaults to ‘out_elastic’.

hide_duration#

Duration of hiding the spinner.

New in version 1.2.0.

hide_duration is a NumericProperty and defaults to 0.8.

on_touch_up(*args)#

Receive a touch up event. The touch is in parent coordinates.

See on_touch_down() for more information.

refresh_done() None#