2013-07-15 56 views
2

是否有一種方法可以在級聯中獲取給定文本和固定寬度的字體大小?固定寬度標籤與動態字體大小

我與努力:

TextField{ 
    autoFit: TextAutoFit.FitToBounds 
} 

但文本始終顯示左對齊。要求是在固定矩形中心對齊文本和可變字體大小標籤渲染。

回答

0

如果你只想居中對齊文本,你需要使用textStyle.textAlign財產那樣:

textStyle.textAlign: TextAlign.Center 

爲中心對齊可變字體大小的標籤文本呈現在固定的矩形,你基本上需要爲Label使用textStyle.textAlign屬性指定該矩形的所需寬度和高度,並通過相應的textStyle.fontSizeLabel屬性選擇字體大小。文本對齊將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官方文檔)。

+0

感謝您的回覆,但標籤應縮小「非常非常長的文本」的字體大小以適應內容。此外,「textStyle.fontSize」將始終返回創建窗口小部件時設置的字體大小。 – Shailesh

+0

Ugg。對不起,誤點了。 Sunseeker,我並不是故意冷眼旁觀。當我看到它時太遲了。 –

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