Я пытаюсь создать экран с повторным отображением, вложенным либо в макет с плавающей точкой, либо в относительный макет.
Вот мой код, в основном адаптированный из документации kivy. Я попытался добавить Floatlayout с помощью тестовой кнопки, однако кнопка / макет не отображаются на экране.
Данные и импорт определены правильно, они просто оставлены на месте из-за проблем с космосом. Любые советы или указатели в правильном направлении будут высоко оценены. Мой план состоит в том, чтобы иметь список выбора по выбору, с кнопками в правой части экрана, такими как добавить, удалить и т. Д.
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: .3, None
size_hint_y: None
height: self.minimum_height
orientation: 'vertical'
multiselect: True
touch_multiselect: True
<FloatLayout>:
size_hint: .7, 1
pos_hint: {"right": .3, "top": 1}
Button:
text: "test"
''')
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 = [category for category in categories]
class TestApp(App):
def build(self):
return RV()
if __name__ == '__main__':
TestApp().run()