如何在Downed中使用RecycleView?

问题描述 投票:0回答:1

根据关于回收视图的kivy文档上发布的代码,如何更改数据?如何更改可选标签的大小?特别是如果我想在屏幕上有更多的小部件,如何将列表的位置设置在屏幕的底部?

我试图用GridLayout,BoxLayout改变位置,没有任何反应。

'''
from kivy.app import App
from kivy.lang import Builder
from kivy.uix.recycleview import RecycleView
from kivy.uix.recycleview.views import RecycleDataViewBehavior
from kivy.uix.label import Label
from kivy.properties import BooleanProperty
from kivy.uix.recycleboxlayout import RecycleBoxLayout
from kivy.uix.behaviors import FocusBehavior
from kivy.uix.recycleview.layout import LayoutSelectionBehavior

Builder.load_string('''
<SelectableLabel>:
    # Draw a background to indicate selection
    canvas.before:
        Color:
            rgba: (.0, 0.9, .1, .3) if self.selected else (0, 0, 0, 1)
        Rectangle:
            pos: self.pos
            size: self.size
<RV>:
    viewclass: 'SelectableLabel'
    SelectableRecycleBoxLayout:
        default_size: None, dp(56)
        default_size_hint: 1, None
        size_hint_y: None
        height: self.minimum_height
        orientation: 'vertical'
        multiselect: True
        touch_multiselect: True
''')


class SelectableRecycleBoxLayout(FocusBehavior, LayoutSelectionBehavior,
                                 RecycleBoxLayout):
    ''' Adds selection and focus behaviour to the view. '''


class SelectableLabel(RecycleDataViewBehavior, Label):
    ''' Add selection support to the Label '''
    index = None
    selected = BooleanProperty(False)
    selectable = BooleanProperty(True)

    def refresh_view_attrs(self, rv, index, data):
        ''' Catch and handle the view changes '''
        self.index = index
        return super(SelectableLabel, self).refresh_view_attrs(
            rv, index, data)

    def on_touch_down(self, touch):
        ''' Add selection on touch down '''
        if super(SelectableLabel, self).on_touch_down(touch):
            return True
        if self.collide_point(*touch.pos) and self.selectable:
            return self.parent.select_with_touch(self.index, touch)

    def apply_selection(self, rv, index, is_selected):
        ''' Respond to the selection of items in the view. '''
        self.selected = is_selected
        if is_selected:
            print("selection changed to {0}".format(rv.data[index]))
        else:
            print("selection removed for {0}".format(rv.data[index]))

class RV(RecycleView):
    def __init__(self, **kwargs):
        super(RV, self).__init__(**kwargs)
        self.data = [{'text': str(x)} for x in range(100)]


class TestApp(App):
    def build(self):
        return RV()

if __name__ == '__main__':
     TestApp().run()

'''

python kivy recyclerview-layout
1个回答
1
投票

Question 1

如何更改数据?

回答

通过更新self.data来更改数据

RecycleView » data

RecycleView是通过处理data(即self.data)生成的,基本上是一个dicts列表,并根据需要使用这些dicts生成viewclass的实例。

Question 2

如何更改可选标签的大小?

回答

可以在Python脚本或kv文件中更改每个可选小部件的大小,尤其是高度。

参考这个例子,可以通过在default_size: None, dp(30)设置SelectableRecycleBoxLayout来改变高度。至于每个可选小部件的宽度,它将根据一行数据中的数字列进行更改,self.data

使用SelectableRecycleGridLayout,可以使用cols_minimum指定每列的最小宽度

Question 3

如果我想在屏幕上有更多的小部件,如何将列表的位置设置在屏幕的底部?

回答

  • 声明一个继承BoxLayout的根小部件

片段

<RootWidget>:
    orientation: 'vertical'
    BoxLayout:
        size_hint: 1, 0.8
    BoxLayout:
        size_hint: 1, 0.2
        RV:

产量

RecyclView of Buttons

Example

How to add vertical scroll in RecycleView

© www.soinside.com 2019 - 2024. All rights reserved.