在上一篇文章006_slate_02_layout-1_directional.md中,我们用"Padding": 16
指定控件占用的空间。
在这篇文章中,我们来看下具体的Padding指的是什么,并一并解释几个相似的关键字直接的yi'tong
Padding of Content¶
如下图,我们创建了一个没有Content(子控件尺寸为0),Padding值为16的SBorder,所以SbBorder的实际尺寸为 32X32 px。
...
"Root":{
"SVerticalBox":
{
"Slots": [
{
"AutoHeight": true,
"SHorizontalBox":
{
"Slots": [
{
"AutoWidth": true,
"SBorder": {
"BorderBackgroundColor": [0, 1, 0, 1], "BorderImage": { "Style": "FEditorStyle", "Brush": "DashedBorder"},
"Padding": 16
}
}
]
}
}
]
}
}
注意¶
- 此时的Padding是在"SBorder"内,实在内部的子控件(空)的外围添加了空白的空间
Padding of Slot¶
当我们将"Padding"
加在SBorder的外面,这时候"Padding"
修饰的是"SHorizontalBox"
中的第一个Slot
,所以此时空白空间被添加到了"SBorder"
的外围
...
"AutoHeight": true,
"SHorizontalBox":
{
"Slots": [
{
"AutoWidth": true,
"Padding": 10,
"SBorder": {
"BorderBackgroundColor": [0, 1, 0, 1], "BorderImage": { "Style": "FEditorStyle", "Brush": "DashedBorder"},
"Padding": 16
}
}
]
}
对比没有添加Slot Padding的 "SBorder"
, 绿框周围是这新增的10px的空白空间:
...
"SHorizontalBox":
{
"Slots": [
{
"AutoWidth": true,
"Padding": 10,
"SBorder": {
"BorderBackgroundColor": [0, 1, 0, 1], "BorderImage": { "Style": "FEditorStyle", "Brush": "DashedBorder"},
"Padding": 16
}
},
{
"AutoWidth": true,
"SBorder": {
"BorderBackgroundColor": [1, 1, 1, 1], "BorderImage": { "Style": "FEditorStyle", "Brush": "DashedBorder"},
"Padding": 16
}
}
]
}
如果我们在其中的Content中添加一个按钮:
...
"AutoWidth": true,
"SBorder": {
"BorderBackgroundColor": [0, 1, 0, 1], "BorderImage": { "Style": "FEditorStyle", "Brush": "DashedBorder"},
"Padding": 16,
"Content":{
"SButton": {
"Text": "A Button"
}
}
}
...
"SButton"就占据了"SBorder"中之前“空控件”所在的位置,它的外围是"Padding:16"
, 绿框外围是Slot的"Padding:10"
所以,SBorder的尺寸变成了内部按钮的尺寸,加上Padding的尺寸
ContentPadding of Button¶
如果我们觉得按钮显得太过拥挤了,想要制作一个“更为重要”的按钮,我们可以用SButton中的“ContentPadding”来调整按钮的尺寸:
...
"SButton": {
"ContentPadding": [16, 8],
"Text": "A Button"
}
...
在按钮内部,水平方向和垂直方向的两侧分别添加了16px 和 8px的空白空间
Padding of Text¶
部分的文本控件也可设置Padding值, 在下图的"SEditableTextBox"中
...
"SBorder": {
"BorderBackgroundColor": [0, 1, 0, 1], "BorderImage": { "Style": "FEditorStyle", "Brush": "DashedBorder"},
"Content":{
"SEditableTextBox": {
"Padding": 20,
"Text": "Text Input"
}
}
}
加入"Padding": 20
后,文本"Text Input"四周就分别添加了20px的空白区域。
注意¶
~~这些空白区域依然属于文本控件的有效范围,在空白处点击后,会会变成文本输入模式。(为什么要特殊说明,因为后续就有属性是占用空间,但不捕获焦点的)~~
Margin of Text¶
下面的例子是一个"SMultiLineEditableTextBox", 它除了"Padding" 属性以外,还有一个"Margin"
"SBorder": {
"BorderBackgroundColor": [0, 1, 0, 1], "BorderImage": { "Style": "FEditorStyle", "Brush": "DashedBorder"},
"Padding": 16,
"Content":{
"SMultiLineEditableTextBox": {
"Padding": 10,
"Text": "SMultiLineEditableTextBox"
}
}
}
加上"Padding": 10
后的表现和上文中的其他控件一样,在文本四周,添加了10px的空白:
加上"Margin": 30
"SBorder": {
"BorderBackgroundColor": [0, 1, 0, 1], "BorderImage": { "Style": "FEditorStyle", "Brush": "DashedBorder"},
"Padding": 16,
"Content":{
"SMultiLineEditableTextBox": {
"Padding": 10,
"Margin": 30
"Text": "SMultiLineEditableTextBox"
}
}
}
现在,周围的空白区域变成了10px 的"Padding"
+ 30px 的 "Margin"
。注意下面动图中鼠标的显示状态,当鼠标在内测的30px时,鼠标是"I"字输入样式。打开绿色实体Debug框,可以看到,"Margin": 30
位于控件内侧,"Padding": 10
位于
注意¶
- 这里的Magin位于最内侧,与Html网页控件中,margin位于最外侧是不同的
Padding值的填写¶
在JSON中,我们在填写Padding,Margin等数值的时候,会有以下3种写法
- Padding值是一个数值。例如下面,将表示上下左右4个方向的Padding`值均为16
"Padding": 16,
- Padding值是一个长度为2的数组。如下,将表示水平方向的Padding值均为16,垂直方向的Padding值为12
"Padding": [16, 12],
- Padding值是一个长度为4的数组。如下,将表示左侧,上方,右侧,下方(顺时针)的Padding值分布为:10,20,30和40
"Padding": [10, 20, 30, 40],
小结¶
SHorizontalBox
,SVerticalBox
等Layout控件,都用"Padding"
"ContentPadding"
是SButton组件专用- 大部分文字控件都有
Margin
属性,有边框的文字控件有"Padding"
属性 Margin
在内会捕获鼠标,"Padding"
不会
Cheat Sheet¶
Slate | Description | 有效 |
---|---|---|
Slot | Padding | ok |
SBorder | Padding | |
SButton | ContentPadding | ok |
SBox | Padding | |
SEditableText | - | 没有padding也没有margin |
STextBlock | Margin | |
SEditableTextBox | Padding | new |
SMultiLineEditableText | Margin | 只有margin |
SMultiLineEditableTextBox | Padding + Margin | -- |
SRichTextBlock | Margin |
Padding 和margin的总结¶
Padding | Margin | ||
---|---|---|---|
Slot | |||
SBorder | Yes | ||
SButton | |||
SBox | |||
STextBlock | No | Yes | |
SEditableText | No | No | |
SEditableTextBox | Yes | No | -- > : public SBorder |
SMultiLineEditableText | No | Yes | |
SMultiLineEditableTextBox | Yes | Yes | -- > : public SBorder |
SRichTextBlock | No | Yes |
todo, 上面的表格,需要验证