2

有没有办法在级联中获取给定文本和固定宽度的字体大小?

我正在尝试:

TextField{
  autoFit: TextAutoFit.FitToBounds
}

但文本总是出现左对齐。要求是将文本与固定矩形中的可变字体大小标签呈现​​居中对齐。

4

2 回答 2

1

如果您只想居中对齐文本,则需要使用textStyle.textAlign如下属性:

textStyle.textAlign: TextAlign.Center

为了在固定矩形中使用可变字体大小标签渲染居中对齐文本,您基本上需要为上述Label使用 textStyle.textAlign属性指定该矩形的所需宽度和高度,并通过相应的属性选择字体大小textStyle.fontSize Label。文本对齐将Cascades自动完成(当然,如果您的文本不能适合指定的宽度/高度,它将被切断):

import bb.cascades 1.0

Page {
    Container {
        layout: DockLayout {}
        horizontalAlignment: HorizontalAlignment.Fill
        verticalAlignment: VerticalAlignment.Fill
        Label {
            horizontalAlignment: HorizontalAlignment.Center
            verticalAlignment: VerticalAlignment.Center
            maxWidth: 300
            minWidth: maxWidth
            maxHeight: 100
            minHeight: maxHeight
            multiline: true
            text: "Some very very very very very long text here"
            textStyle.textAlign: TextAlign.Center
            textStyle.fontSize: FontSize.XLarge
        }
    }
}

我推荐这种方法来实现目标。

但是,如果您真的想获取小部件中使用的字体的绝对值,textStyle.fontSize请为此使用属性(TextStyle官​​方文档)。

于 2013-07-17T01:29:11.927 回答
0

目前 BB10 Cascades 中没有字体指标,因此您将无法确定字体是否不适合标签并调整其大小。

您可以对 layoutUpdateHandler 使用某种技巧来粗略调整大小,但我不推荐它。如果文本经常更改,您会看到闪烁,但如果只设置一次,则可能没问题。更改“onCreationCompleted”中设置的文本以查看文本是否为您调整大小。

    Container {
        id: root
        implicitLayoutAnimationsEnabled: false 

        background: Color.Cyan
        property int width: 500
        property string  text: ""
        property double textSize: 20
        layout: DockLayout {
        }
        attachedObjects: [
            LayoutUpdateHandler {
                onLayoutFrameChanged: {
                    if (layoutFrame.width > root.width) {
                        root.textSize = root.textSize - 1
                    }
                }
            }
        ]
        Label {
            implicitLayoutAnimationsEnabled: false 
            maxWidth: root.width
            text: root.text
            textStyle {
                fontSize: FontSize.PointValue
                fontSizeValue: root.textSize
            }
        }
        Label {
            implicitLayoutAnimationsEnabled: false 
            text: root.text
            opacity: 0
            textStyle {
                fontSize: FontSize.PointValue
                fontSizeValue: root.textSize
            }

        }
        onCreationCompleted: {
            root.text = "Hello World AAAAAAAA"
        }
    }
于 2013-07-23T14:36:20.400 回答