所以我有这个聊天应用程序,就像我使用Kivy的 RecycleView来实例化一个自定义小部件(命名为' Row')并且我传递了它的值我希望。
如果Row自定义小部件仅包含Label子级,我添加图像和按钮的时刻(我将在一秒内解释原因),存在奇怪的间距和定位问题,它可以正常工作/ strong>哪个不应该存在,因为我正在使用BoxLayout并尝试了正确的size_hint:和height:技术让它们看起来正确。
<Row@BoxLayout>:
orientation: 'vertical'
text: ''
source: 'res/icon.png'
buttontext: ''
Label:
markup: True
text_size: self.size
text: root.text
Image:
size: self.size
source: root.source
allow_stretch: True
Button:
text: root.buttontext #contains a link
on_press: app.root.stuff(self.text) #opens that link
# Relevant Screen where I am using the RecycleView
<ChatBotScreen>
BoxLayout:
ti_userinput: ti_userinput
orientation: 'vertical'
ScrollView:
size_hint_y: 85
RecycleView:
id: chatbase_list
viewclass: 'Row'
data: []
RecycleBoxLayout:
padding: "15dp", "45dp", "15dp", "15dp"
default_size: None, dp(25)
default_size_hint: 1, None
size_hint_y: None
height: self.minimum_height
orientation: 'vertical'
TextInput:
size_hint_y: None
height: "40dp"
id: ti_userinput
multiline: False
on_text_validate: root.on_user_enter_text()
由于我的自定义窗口小部件Row正在扩展BoxLayout并且我使用垂直方向,为什么子窗口小部件(标签,图像和按钮)不重叠?
这是班级&amp;我正在调用的函数来传递RecycleView
中的数据 class ChatBotScreen(Screen):
nickname = StringProperty()
rvList = []
def display_bot_output(self, botOutput):
# Initialize an empty dictionary
tempDict = {}
textToDisplay = '' + botOutput
# Update the dictionary with properties:values and then pass it as a list to RecycleView's data
tempDict.update({'text':textToDisplay, 'buttontext':'https://google.com'})
self.rvList.append(tempDict)
self.ids.chatbase_list.data = self.rvList
我想在屏幕上看到的是:
我通过标签 textToDisplay 变量发送的文字
在标签下方,如果没有通过来源,则不会显示图像,我可以显示图片来源,
在图像下方,应显示带有链接的按钮,我通过 buttontext ,如果没有通过,则不会显示任何按钮。
我能够渲染所有这些但是间距全部都搞砸了。
下面的截图:
这里我首先发送的数据只有Label文本信息和Image,因此Button文本为空(它仍然显示),然后我发送另一个数据(第二行小部件),带有Label文本信息,Image和Button文字(谷歌链接)。
任何帮助非常赞赏。谢谢!
答案 0 :(得分:0)
<ChatBotScreen>
BoxLayout:
ti_userinput: ti_userinput
orientation: 'vertical'
ScrollView:
# to have the screen get bigger not lliek what you have
size: root.size
RecycleView:
id: chatbase_list
viewclass: 'Row'
data: []
RecycleBoxLayout:
padding: "15dp", "45dp", "15dp", "15dp"
default_size: None, dp(25)
default_size_hint: 1, None
size_hint_y: None
height: self.minimum_height
# add this so you can scroll
row_default_height: 60
orientation: 'vertical'
TextInput:
size_hint_y: None
height: "40dp"
id: ti_userinput
multiline: False
on_text_validate: root.on_user_enter_text()