Kivy RelativeLayout vs FloatLayout

时间:2018-03-08 10:38:46

标签: android python android-layout kivy

这是来自Kivy相对布局的文档。 https://kivy.org/docs/api-kivy.uix.relativelayout.html

  

相对布局:此布局允许您设置相对坐标   为孩子。如果您想要绝对定位,请使用FloatLayout。   RelativeLayout类的行为与常规的FloatLayout类似   除了它的子窗口小部件相对于布局定位。   当position =(0,0)的小部件被添加到RelativeLayout时,   当RelativeLayout的位置为时,子窗口小部件也会移动   改变。子窗口小部件坐标始终为(0,0)   相对于父布局。

我看到Floatlayout也是如此。事实上,Floatlayout和RelativeLayout都支持绝对和相对定位,具体取决于是否使用了pos_hint或pos。

实际上,无论绝对位置和相对位置如何,当布局位置发生变化时,小部件都会移动。

2 个答案:

答案 0 :(得分:2)

FloatLayout :此布局使用比例坐标组织小部件 size_hint和pos_hint属性。值是数字 介于0和1之间,表示窗口大小的比例。

enter image description here

enter image description here

相对布局:此布局的运行方式与FloatLayout的运行方式相同,但是 定位属性(pos,x,center_x,right,y,center_y和 top)是相对于布局大小而不是窗口大小。

可用的pos_hint键(x,center_x,right,y,center_y和top)非常有用 用于对齐边缘或居中。例如,pos_hint:{'center_x':。5, 'center_y':。5}将Widget放在中间,无论大小如何 窗口是。

答案 1 :(得分:0)

请参阅下面的python程序。 FloatVerification和RelativeVerification类在窗口大小和布局大小方面的行为方式相同。是否有一些我想念的方面?

from kivy.app import App 

from kivy.uix.floatlayout import FloatLayout
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.relativelayout import RelativeLayout

from kivy.uix.button import Button

class FloatVerification(App):
    def build(self):
        bl  = BoxLayout()

        fl1 = FloatLayout()
        fl2 = FloatLayout()


        b1 = Button(size_hint=(.5,.5),
                    pos_hint={'top':.5,'right':.5},
                    text="Hello")
        b2 = Button(size_hint=(.5,.5),
                    pos_hint={'top':.5,'right':.5},
                    text="Hello")

        fl1.add_widget(b1)
        fl2.add_widget(b2)

        bl.add_widget(fl1)
        bl.add_widget(fl2)

        return bl

class RelativeVerification(App):
    def build(self):
        bl  = BoxLayout()

        rl1 = RelativeLayout()
        rl2 = RelativeLayout()


        b1 = Button(size_hint=(.5,.5),
                    pos_hint={'top':.5,'right':.5},
                    text="Hello")
        b2 = Button(size_hint=(.5,.5),
                    pos_hint={'top':.5,'right':.5},
                    text="Hello")

        rl1.add_widget(b1)
        rl2.add_widget(b2)

        bl.add_widget(rl1)
        bl.add_widget(rl2)

        return bl

if __name__  == "__main__":
    FloatVerification().run()
    #RelativeVerification().run()