2

是否可以在 Kivy 框架水平 ListView 中创建?

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

默认值:

: :
| |
+-------------------+ ^
| | ^
| 元素 5 | ^
| | |
+-------------------+ |
| | |
| 元素 6 | |
| | |
+-------------------+ |
| | |
| 元素 7 | |
| | v
+-----------------+ v
| | v
: :

我想:

... --+-----------+-----------+------------+---- ...
      | | | |
      | 元素 5 | 元素 6 | 元素 7 |
      | | | |
... --+-----------+-----------+------------+---- ...

   <<<-------------------------------------------->>>
4

2 回答 2

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))

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

于 2013-08-19T00:14:52.857 回答
0

随着 RecyclerView 的发布,在 android 应用程序中定位 listView 确实变得更容易了。RecyclerView 库有一个名为 LinearLayoutManager 的类,它负责确定 ListView 的方向。

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

我已经尝试过演示,所以它确实运行得很好。我希望已经清楚地回答了你

于 2016-12-04T01:10:56.437 回答