Bootstrap Chameleon Logo

Texts

文本控件

Alt text

  • 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"
                }
            }
        ]
    }

020_texts

注意

  • 所有文本控件都可以通过"\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"
    }

Alt text

!!! 注意

  • "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"属性

A snapshot displaying the 'ForegroundColor' property of SEditableTextBox

BackgroundColor

同样 SEditableTextBox,SMultiLineEditableTextBox 也有"BackgroundColor"属性,可以

    "SEditableTextBox":
    {

        "BackgroundColor": [100, 0, 0, 1],
        "Text": "SEditableTextBox                     <-BackgroundColor"
    }

A snapshot displaying the 'Background' property of SEditableTextBox

!!! 注意

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

An image showcasing numerous STextBlock styles

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"
        }

A snapshot exhibiting various Font styles

其中"SRichTextBlock"控件是没有"Font"属性的,它的字体可以直接在富文本的内容中指定.ch_text]({filename}./006_slate_07_rich_text.md)

TextStyle

"TextStyle"是"Font"的超集. 它不仅控制文本的字体,同时也控制文本的颜色

    "STextBlock": {
        "Text": "STextBlock",
        "TextStyle": {
            "Style": "FEditorStyle",
            "StyleName": "Profiler.TooltipBold"
        }
    }

A snapshot presenting multiple TextStyle options

Style

"SEditableTextBox" 和 "SMultiLineEditableTextBox" 有"Style"属性,它不仅控制文本

    "SEditableTextBox":
    {
        "Text": "SEditableTextBox",
        "Style": {
            "Style": "FEditorStyle",
            "StyleName": "Graph.Node.NodeTitleEditableText"
        }
    }

A snapshot demonstrating different SEditableTextBox styles

RichText

如果需要在一个控件中使用多种颜色或者字体,可以使用RichText, RichText 可以提供更加方便和丰富的设置

  • SMultiLineEditableText
  • SMultiLineEditableTextBox
  • SRichTextBlock

还有在本文中没有出现过的控件, 也支持富文本

小结

  • "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