Skip to main content
 首页 » 编程设计

android之kivy:水平ListView

2025年05月04日5198°冷暖

是否可以在 Kivy 框架中创建横向 ListView?

所有示例都展示了如何创建垂直方向的元素列表,但我需要使用水平滚动条水平排列它们。

默认值:

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

我愿意:

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

请您参考如下方法:

方向是硬编码的。如果你看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)) 

我设法获得水平列表。但是,它打破了滚动。看起来您必须更多地更改此配置并修改滚动方法才能获得所需的结果。