如何将BoxLayout定位到屏幕顶部

时间:2015-04-26 20:04:10

标签: android python kivy

我有一个嵌套在BoxLayout小部件中的ActionBar。我希望ActionBar出现在屏幕的最顶端。目前,我只能让它出现在最底层。这是一个截图:

enter image description here

这是我的main.py:

from kivy.app import App
from kivy.uix.boxlayout import BoxLayout

class ShowActionBar(BoxLayout):
    pass

class MyTestApp(App):
    pass

if __name__ == "__main__":
    MyTestApp().run()

这是我的.kv文件:

ShowActionBar:

<ShowActionBar>:
    orientation: "vertical"
    BoxLayout:
        pos_hint: {'top': 1}
        orientation: "vertical"
        ActionBar:
            ActionView:
                use_seperator: True
                ActionPrevious:
                    title: "My Title"
                    with_previous: False
                ActionOverflow:
                    ActionButton:
                        text: "Settings"
                ActionButton:
                    text: "Log Out"

正如您所看到的,我尝试过播放pos_hint的各种值,但它似乎不会影响ActionBar的位置。我怀疑我错过了一些简单的东西。我需要做什么才能让ActionBar出现在窗口的最顶端?

1 个答案:

答案 0 :(得分:2)

您的示例实际上有点过于简单 - 只要添加其他小部件,您就会获得正确的行为。例如,这是您的小部件的新规则:

<ShowActionBar>:
    orientation: "vertical"
    ActionBar:
        ActionView:
            use_seperator: True
            ActionPrevious:
                title: "My Title"
                with_previous: False
            ActionOverflow:
                ActionButton:
                    text: "Settings"
            ActionButton:
                text: "Log Out"
    Label:
        text: 'the next widget added fills all the extra space'
        text_size: self.size
        halign: 'center'
        valign: 'middle

请注意,我还删除了不必要的BoxLayout级别。

真正的问题是BoxLayout只有一个孩子时会忽略pos_hint。也许它算作一个bug,但最多只是一个小bug,因为它并不是真的打算处理一个固定大小的单个孩子 - 一个FloatLayout更适合这个。但是,一旦你添加了更多的孩子,BoxLayout可能就是你想要的。