文本控件¶

- STextBlock
 - SEditableText
 - SEditableTextBox
 - SMultiLineEditableText
 - SMultiLineEditableTextBox
 - SRichTextBlock
 
其他:
- SHeader
 
SHeader 通常有也是用于显示文本只用, 它其实是左右两侧各有一个横线的组合控件. 文字实际来自于其中的"STextBlock", 如果我们将下面例子中的"STextBlock"替换为"SImage"就可以显示图片.甚至放入更复杂的布局控件等
    "SHeader":
    {
        "Content":
        {
            "STextBlock": { "Text": "A Header", "Justification": "Center"}
        }
    }
区别¶
- "STextBlock" 只用于显示文本,用户不可修改其中内若
 - "SEditableText" 外观与 "STextBlock" 类似. 但用户可修改其中内容
 - "SMultiLineEditableText" 支持用户用空格换行, 是"SEditableText"的"可换行"版本
 - "SEditableTextBox" 和 "SMultiLineEditableTextBox" 分别是 "SEditableText" 和 "SMultiLineEditableText" 带有边框的版本
 
对比表格¶
| Slate | Editable | Frame Box | Multi-Line | Rich Text | Padding | Margin | ColorAndOpacity | |
|---|---|---|---|---|---|---|---|---|
| STextBlock | No | No | No | No | Yes | Yes | ||
| SEditableText | Yes | No | No | No | No | Yes | ||
| SEditableTextBox | Yes | Yes | No | Yes | No | Yes | --> : SBorder | |
| SMultiLineEditableText | Yes | No | Yes | No | Yes | N | ||
| SMultiLineEditableTextBox | Yes | Yes | Yes | Yes | yes | Yes | Yes | -- > : SBorder | 
| SRichTextBlock | No | No | No | Yes | No | Yes | N | 
    "SVerticalBox":
    {
        "Slots": [
            {
                "AutoHeight": true,
                "Padding": 8,
                "STextBlock": {
                    "Text": "STextBlock"
                }
            },
            {
                "AutoHeight": true,
                "Padding": 8,
                "SEditableText":
                {
                    "Text": "SEditableText"
                }
            },
            {
                "AutoHeight": true,
                "Padding": 8,
                "SEditableTextBox":
                {
                    "Text": "SEditableTextBox"
                }
            },
            {
                "AutoHeight": true,
                "Padding": 8,
                "SMultiLineEditableText":
                {
                    "Text": "SMultiLineEditableText"
                }
            },
            {
                "AutoHeight": true,
                "Padding": 8,
                "SMultiLineEditableTextBox":
                {
                    "Text": "SMultiLineEditableTextBox"
                }
            },
            {
                "AutoHeight": true,
                "Padding": 8,
                "SRichTextBlock":
                {
                    "Text": "SRichTextBlock"
                }
            }
        ]
    }

注意¶
- 所有文本控件都可以通过"\n"进行换行, 例如
"line 1\nline2" 
颜色¶
Slate文本控件中的颜色设置有多种方法,比较混乱。
| Slate | bCompoundWidget | ColorAndOpacity | ForegroundColor | BackgroundColor | 
|---|---|---|---|---|
| STextBlock | N | Yes | N | N | 
| SEditableText | N | Yes | N | N | 
| SEditableTextBox | Yes | Yes | Yes | Yes | 
| SMultiLineEditableText | N | N | N | N | 
| SMultiLineEditableTextBox | Yes | Yes | Yes | Yes | 
| SRichTextBlock | N | N | N | N | 
ColorAndOpacity¶
控件上的"ColorAndOpacity"可以整体控制控件的颜色,因此也可以来设置文字的颜色。
    "SEditableTextBox":
    {
        "ForegroundColor": [1, 0, 1, 1],
        "Text": "SEditableTextBox                     <-ForegroundColor"
    }

!!! 注意
- "ColorAndOpacity" 不仅会影响前景色,也会影响背景的背景色,比如文字被选中的时的
 - 对于自身没有"ColorAndOpacity",上层控件的 "ColorAndOpacity" 也可以用来影响文本
 
    "SVerticalBox":
    {
        "Slots": [
            {
                "AutoHeight": true,
                "Padding": 4,
                "STextBlock":
                {
                    "Text": "STextBlock",
                    "ColorAndOpacity": [0, 0.5, 1, 1],
                    "Font": {
                        "Style": "FEditorStyle",
                        "StyleName": "FontAwesome.16"
                    },
                    "ShadowOffset": [2, 2],
                    "ShadowColorAndOpacity": [0, 0, 0, 0.75]
                }
            },
            {
                "AutoHeight": true,
                "Padding": 4,
                "SEditableText":
                {
                    "ColorAndOpacity": [1, 1, 1, 1],
                    "Font": {
                        "Style": "FCoreStyle",
                        "StyleName": "DefaultFont.Bold.11"
                    },
                    "HintText": "Readonly Text Can't Be Edit.",
                    "Text": "SEditableText"
                }
            },
            {
                "AutoHeight": true,
                "Padding": 4,
                "SEditableTextBox":
                {
                    "ColorAndOpacity": [0, 1, 1, 1],
                    "Font": {
                        "Style": "FCoreStyle",
                        "StyleName": "DefaultFont.Bold.11"
                    },
                    "Text": "SEditableTextBox"
                }
            },
            {
                "AutoHeight": true,
                "Padding": 4,
                "SMultiLineEditableText":
                {
                    "Text": "SMultiLineEditableText\n\tColor is NOT from ColorAndOpacity",
                    "TextStyle": {"Style": "FEditorStyle", "StyleName": "AnimViewport.WarningText"}
                }
            },
            {
                "AutoHeight": true,
                "Padding": 4,
                "SMultiLineEditableTextBox":
                {
                    "Text": "SMultiLineEditableTextBox",
                    "ColorAndOpacity": [0.5, 0.5, 1, 1],
                    "Font": {
                        "Style": "FCoreStyle",
                        "StyleName": "DefaultFont.Italic.12"
                    }
                }
            },
            {
                "AutoHeight": true,
                "Padding": 4,
                "SRichTextBlock":
                {
                    "Text": "SRichTextBlock"
                }
            }
        ]
    }
ForegroundColor¶
SEditableTextBox,SMultiLineEditableTextBox 这两个用输入框的文本控件,可以通过"F
实际上,所有的CompoundWidget 都有"ForegroundColor"属性

BackgroundColor¶
同样 SEditableTextBox,SMultiLineEditableTextBox 也有"BackgroundColor"属性,可以
    "SEditableTextBox":
    {
        "BackgroundColor": [100, 0, 0, 1],
        "Text": "SEditableTextBox                     <-BackgroundColor"
    }

!!! 注意
- 上面代码中的颜色值是
[100, 0, 0, 1], 是一个超过远超过红色[1, 0, 0, 1]的红色 - UE5的采用暗色模式,控件的背景色接近黑色,所有用数值超过1的颜色值与其相乘,得到接
 - 如果不想用
[100, 0, 0, 1]这样Hacky的方式来修改颜色,也可以通过使用Style,修改背然后再用"BackgroundColor"控制 

Styles¶
文本控件中,一个有3种不同的Style:
- 控制控件字体的"Font": 
FontStyle - 控制控件文本样式的:"TextStyle": 
FTextBlockStyle - 控制控件整体样式的:"Style": 
FEditableTextStyle 
文本
| Slate | bCompoundWidget | Font | TextStyle | Style | 
|---|---|---|---|---|
| STextBlock | N | Yes | Yes | N | 
| SEditableText | N | Yes | Yes | N | 
| SEditableTextBox | Yes | Yes | Yes | Yes | 
| SMultiLineEditableText | N | Yes | Yes | N | 
| SMultiLineEditableTextBox | Yes | Yes | Yes | Yes | 
| SRichTextBlock | N | N | Yes | N | 
Font¶
就如上面例子中出现过的,我们可以通过"Font"指定文本中的字体.
        "Font": {
            "Style": "FCoreStyle",
            "StyleName": "DefaultFont.Bold.11"
        }

其中"SRichTextBlock"控件是没有"Font"属性的,它的字体可以直接在富文本的内容中指定.ch_text]({filename}./006_slate_07_rich_text.md)
TextStyle¶
"TextStyle"是"Font"的超集. 它不仅控制文本的字体,同时也控制文本的颜色
    "STextBlock": {
        "Text": "STextBlock",
        "TextStyle": {
            "Style": "FEditorStyle",
            "StyleName": "Profiler.TooltipBold"
        }
    }

Style¶
"SEditableTextBox" 和 "SMultiLineEditableTextBox" 有"Style"属性,它不仅控制文本
    "SEditableTextBox":
    {
        "Text": "SEditableTextBox",
        "Style": {
            "Style": "FEditorStyle",
            "StyleName": "Graph.Node.NodeTitleEditableText"
        }
    }

RichText¶
如果需要在一个控件中使用多种颜色或者字体,可以使用RichText, RichText 可以提供更加方便和丰富的设置
- SMultiLineEditableText
 - SMultiLineEditableTextBox
 - SRichTextBlock
 
还有在本文中没有出现过的控件, 也支持富文本
- SListView SListView
 
小结¶
- "ColorAndOpacity", "ForegroundColor" 可以控制文本的颜色;各种预设好的Style可以
 - 使用Font和 颜色来控制文本的样式比直接使用"TextStyle" 和"Style" 要来的直观
 - 各种控件的Style可以在引擎的SlateEditorStyle.cpp StarshipStyle.cpp,CoreStyle.cpp preview中查看
 
| Slate | bCompoundWidget | ColorAndOpacity | ForegroundColor | Font | TextStyle | Style | 
|---|---|---|---|---|---|---|
| STextBlock | N | Yes | N | Yes | Yes | N | 
| SEditableText | N | Yes | N | Yes | Yes | N | 
| SEditableTextBox | Yes | Yes | Yes | Yes | Yes | Yes | 
| SMultiLineEditableText | N | N | N | Yes | Yes | N | 
| SMultiLineEditableTextBox | Yes | Yes | Yes | Yes | Yes | Yes | 
| SRichTextBlock | N | N | N | N | Yes | N | 
| Previous | ||||||
| Next Topic | ||||||