【问题标题】:kivy: horizontal ListViewkivy:水平列表视图
【发布时间】:2013-08-13 17:21:19
【问题描述】:

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

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

默认值:

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

我想:

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

【问题讨论】:

  • 我想您原则上可以旋转 ListView(即在 Scatter 中),然后使用内容具有相反旋转的小部件填充它。这将提供所需的行为。
  • 问题是文本也会旋转。您可以再次旋转每个文本。不需要 Scatter 来旋转、缩放和平移手势。相反,您可以使用画布的Rotate 指令。我最近写了一篇关于使用Rotate 的帖子。无论如何,使用ScatterRotate 似乎太复杂了,无法实现应该简单的事情。

标签: android python layout kivy


【解决方案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))

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-04-01
      • 2023-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-12
      • 2016-10-29
      相关资源
      最近更新 更多