2013-08-13 3 views
2

Есть ли возможность создать в Kivy framework горизонтальный ListView?kivy: horizontal ListView

Все примеры показывают, как создать список элементов с вертикальной ориентацией, но мне нужно расположить их по горизонтали с горизонтальной полосой прокрутки.

Defaults:

 

:     : 
|     | 
+-------------------+^
|     |^
|  Element 5  |^
|     | | 
+-------------------+ | 
|     | | 
|  Element 6  | | 
|     | | 
+-------------------+ | 
|     | | 
|  Element 7  | | 
|     | v 
+-------------------+ v 
|     | v 
:     : 

Я хотел бы:

 
... --+-----------+-----------+-----------+---- ... 
     |   |   |   | 
     | Element 5 | Element 6 | Element 7 | 
     |   |   |   | 
... --+-----------+-----------+-----------+---- ... 

    <<<---------------------------------------->>> 
+0

Думаю, вы могли бы в принципе повернуть ListView (т. Е. В Scatter), а затем заполнить его виджетами, содержимое которых имеет противоположное вращение. Это даст желаемое поведение. – inclement

+0

Проблема в том, что текст также будет вращаться. Вы можете снова поворачивать каждый текст. Никакая реальная потребность в Scatter, предназначенная для вращения, масштабирования и перевода с помощью жестов. Вместо этого вы можете использовать инструкцию «Повернуть» на холсте. Недавно я написал сообщение об использовании [Поворот] (http://robertour.com/2013/08/08/simple-rotations-of-images-in-kivy/). Во всяком случае, использование 'Scatter' или' Rotate' кажется слишком сложным для достижения чего-то, что должно быть простым. –

ответ

1

ориентация жестко закодирован. Если вы посмотрите на https://github.com/kivy/kivy/blob/master/kivy/uix/listview.py вы найдете:

Builder.load_string(''' 
<ListView>: 
    container: container 
    ScrollView: 
     pos: root.pos 
     on_scroll_y: root._scroll(args[1]) 
     do_scroll_x: False 
     GridLayout: 
      cols: 1 
      id: container 
      size_hint_y: None 
''') 

Я скопировал этот файл в папку проекта и заменить это с:

Builder.load_string(''' 
<ListView>: 
    container: container 
    ScrollView: 
     pos: root.pos 
     on_scroll_y: root._scroll(args[1]) 
     do_scroll_x: False 
     GridLayout: 
      rows: 1 
      id: container 
      size_hint_y: None 
''') 

И с этим тест-код:

#!/usr/bin/env python 
# -*- coding: utf-8 -*- 

from listview import ListView 
from kivy.uix.gridlayout import GridLayout 


class MainView(GridLayout): 
    def __init__(self, **kwargs): 
     kwargs['cols'] = 2 
     super(MainView, self).__init__(**kwargs) 

     list_view = ListView(item_strings=[str(index) for index in range(100)]) 

     self.add_widget(list_view) 


if __name__ == '__main__': 
    from kivy.base import runTouchApp 
    runTouchApp(MainView(width=800)) 

мне удалось для получения горизонтального списка. Однако он сломал прокрутку. Похоже, вам нужно еще больше изменить эту конфигурацию и изменить метод прокрутки, чтобы достичь желаемого результата.

0

С выпуском RecyclerView все стало проще в ориентации спискаView в приложении для Android. Библиотека RecyclerView имеет класс LinearLayoutManager, который отвечает за определение ориентации вашего ListView.

http://whats-online.info/science-and-tutorials/87/Android-tutorial-Horizontal-RecyclerView-with-images-and-text-example/

Я попробовал демо, так что это действительно работает очень хорошо. Надеюсь, вам ясно ответил

Смежные вопросы