4️⃣通過編寫計算器學習ArkUI元件
阿新 • • 發佈:2022-05-26
注:轉自Tuer白曉明,原文地址:https://ost.51cto.com/posts/10723
本系列文章共有五篇,細緻描述瞭如何學習ArkUI元件實現計算器的功能,以下為正文
3.8 Text
元件
在前面的小節中無論是自定義按鈕還是元件示例中都用了Text
元件,用於呈現一段文字資訊,描述各自的作用,Text
元件是應用程式中最常見的元件。
@Entry @Component struct TextExample { build() { Column({space: 15}) { Text('多行文字的文字對齊方式').fontSize(16).fontColor('#999') Text('`Text`元件,用於呈現一段文字資訊,描述各自的作用,`Text`元件是應用程式中最常見的元件。') .fontSize(14).textAlign(TextAlign.Center).border({width: 1}).padding(8) Text('`Text`元件,用於呈現一段文字資訊,描述各自的作用,`Text`元件是應用程式中最常見的元件') .fontSize(14).textAlign(TextAlign.Start).border({width: 1}).padding(8) Text('`Text`元件,用於呈現一段文字資訊,描述各自的作用,`Text`元件是應用程式中最常見的元件') .fontSize(14).textAlign(TextAlign.End).border({width: 1}).padding(8) Text('設定文字超長時的顯示方式').fontSize(16).fontColor('#999') Text('`Text`元件,用於呈現一段文字資訊,描述各自的作用,`Text`元件是應用程式中最常見的元件。') .fontSize(14).textOverflow({overflow: TextOverflow.None}) .border({width: 1}).padding(8) Text('`Text`元件,用於呈現一段文字資訊,描述各自的作用,`Text`元件是應用程式中最常見的元件。') .fontSize(14).textOverflow({overflow: TextOverflow.Clip}) .maxLines(1).border({width: 1}).padding(8) Text('`Text`元件,用於呈現一段文字資訊,描述各自的作用,`Text`元件是應用程式中最常見的元件。') .fontSize(14).textOverflow({overflow: TextOverflow.Ellipsis}) .maxLines(1).border({width: 1}).padding(8) Text('設定文字的文字行高').fontSize(16).fontColor('#999') Text('`Text`元件,用於呈現一段文字資訊,描述各自的作用,`Text`元件是應用程式中最常見的元件。') .fontSize(14).lineHeight(16).border({width: 1}).padding(8) Text('設定文字裝飾線及其顏色').fontSize(16).fontColor('#999') Text('`Text`元件,用於呈現一段文字資訊,描述各自的作用,`Text`元件是應用程式中最常見的元件。') .fontSize(14).decoration({type: TextDecorationType.Overline, color: Color.Blue}) .border({width: 1}).padding(8) Text('`Text`元件,用於呈現一段文字資訊,描述各自的作用,`Text`元件是應用程式中最常見的元件。') .fontSize(14).decoration({type: TextDecorationType.Underline, color: Color.Blue}) .border({width: 1}).padding(8) Text('`Text`元件,用於呈現一段文字資訊,描述各自的作用,`Text`元件是應用程式中最常見的元件。') .fontSize(14).decoration({type: TextDecorationType.LineThrough, color: Color.Blue}) .border({width: 1}).padding(8) } .width('100%') .height('100%') } }
3.9 標準計算器顯示區
在實戰標準計算器設計中,顯示區域是上下兩個Text
元件,居上Text
顯示點選功能按鈕區的錄入資訊,居下Text
顯示計算結果。
// 回顯及結果顯示區 Flex({direction: FlexDirection.Column}) { Text('23+24+5').fontSize(24).fontColor('#999999') .textAlign(TextAlign.End) .width('100%') .height(60) .alignSelf(ItemAlign.Center) .padding({left: 10, right: 10}) Text('52').fontSize(28).fontColor('#444444') .textAlign(TextAlign.End) .width('100%') .height(60) .alignSelf(ItemAlign.Center) .padding({left: 10, right: 10}) } .width('100%') .height(120) .backgroundColor('#FFFFFF')
3.10 使用Column
、Row
容器元件、Button
元件實現功能按鈕區
使用前面已經掌握的Column
容器元件、Row
容器元件以及Button
元件實現功能按鈕區,程式碼如下:
// 功能按鈕、符號按鈕、數字按鈕 Flex({direction: FlexDirection.Column, justifyContent: FlexAlign.Center, alignItems: ItemAlign.Center}) { Column({space: 20}) { Row({space: 20}) { Button('MC', {type: ButtonType.Circle}) .width(64).height(64) .fontSize(20).fontColor('#7D7B7B').fontWeight(FontWeight.Bold) .backgroundColor('#FFFDFD') .borderRadius(32) .shadow({radius: 16, color: 0x7D7B7B, offsetX: 0, offsetY: 2}) Button('M+', {type: ButtonType.Circle}) .width(64).height(64) .fontSize(20).fontColor('#7D7B7B').fontWeight(FontWeight.Bold) .backgroundColor('#FFFDFD') .borderRadius(32) .shadow({radius: 16, color: 0x7D7B7B, offsetX: 0, offsetY: 2}) Button('M-', {type: ButtonType.Circle}) .width(64).height(64) .fontSize(20).fontColor('#7D7B7B').fontWeight(FontWeight.Bold) .backgroundColor('#FFFDFD') .borderRadius(32) .shadow({radius: 16, color: 0x7D7B7B, offsetX: 0, offsetY: 2}) Button('MR', {type: ButtonType.Circle}) .width(64).height(64) .fontSize(20).fontColor('#7D7B7B').fontWeight(FontWeight.Bold) .backgroundColor('#FFFDFD') .borderRadius(32) .shadow({radius: 16, color: 0x7D7B7B, offsetX: 0, offsetY: 2}) } Row({space: 20}) { Button('C', {type: ButtonType.Circle}) .width(64).height(64) .fontSize(20).fontColor(0x1296DB).fontWeight(FontWeight.Bold) .backgroundColor('#FFFDFD') .borderRadius(32) .shadow({radius: 16, color: 0x7D7B7B, offsetX: 0, offsetY: 2}) Button('÷', {type: ButtonType.Circle}) .width(64).height(64) .fontSize(32).fontColor(0x1296DB).fontWeight(FontWeight.Bold) .backgroundColor('#FFFDFD') .borderRadius(32) .shadow({radius: 16, color: 0x7D7B7B, offsetX: 0, offsetY: 2}) Button('×', {type: ButtonType.Circle}) .width(64).height(64) .fontSize(32).fontColor(0x1296DB).fontWeight(FontWeight.Bold) .backgroundColor('#FFFDFD') .borderRadius(32) .shadow({radius: 16, color: 0x7D7B7B, offsetX: 0, offsetY: 2}) Button('⇐', {type: ButtonType.Circle}) .width(64).height(64) .fontSize(32).fontColor(0x1296DB).fontWeight(FontWeight.Bold) .backgroundColor('#FFFDFD') .borderRadius(32) .shadow({radius: 16, color: 0x7D7B7B, offsetX: 0, offsetY: 2}) } Row({space: 20}) { Button('7', {type: ButtonType.Circle}) .width(64).height(64) .fontSize(20).fontColor('#000').fontWeight(FontWeight.Bold) .backgroundColor('#FFFDFD') .borderRadius(32) .shadow({radius: 16, color: 0x7D7B7B, offsetX: 0, offsetY: 2}) Button('8', {type: ButtonType.Circle}) .width(64).height(64) .fontSize(20).fontColor('#000').fontWeight(FontWeight.Bold) .backgroundColor('#FFFDFD') .borderRadius(32) .shadow({radius: 16, color: 0x7D7B7B, offsetX: 0, offsetY: 2}) Button('9', {type: ButtonType.Circle}) .width(64).height(64) .fontSize(20).fontColor('#000').fontWeight(FontWeight.Bold) .backgroundColor('#FFFDFD') .borderRadius(32) .shadow({radius: 16, color: 0x7D7B7B, offsetX: 0, offsetY: 2}) Button('-', {type: ButtonType.Circle}) .width(64).height(64) .fontSize(32).fontColor(0x1296DB).fontWeight(FontWeight.Bold) .backgroundColor('#FFFDFD') .borderRadius(32) .shadow({radius: 16, color: 0x7D7B7B, offsetX: 0, offsetY: 2}) } Row({space: 20}) { Button('4', {type: ButtonType.Circle}) .width(64).height(64) .fontSize(20).fontColor('#000').fontWeight(FontWeight.Bold) .backgroundColor('#FFFDFD') .borderRadius(32) .shadow({radius: 16, color: 0x7D7B7B, offsetX: 0, offsetY: 2}) Button('5', {type: ButtonType.Circle}) .width(64).height(64) .fontSize(20).fontColor('#000').fontWeight(FontWeight.Bold) .backgroundColor('#FFFDFD') .borderRadius(32) .shadow({radius: 16, color: 0x7D7B7B, offsetX: 0, offsetY: 2}) Button('6', {type: ButtonType.Circle}) .width(64).height(64) .fontSize(20).fontColor('#000').fontWeight(FontWeight.Bold) .backgroundColor('#FFFDFD') .borderRadius(32) .shadow({radius: 16, color: 0x7D7B7B, offsetX: 0, offsetY: 2}) Button('+', {type: ButtonType.Circle}) .width(64).height(64) .fontSize(32).fontColor('#1296DB').fontWeight(FontWeight.Bold) .backgroundColor('#FFFDFD') .borderRadius(32) .shadow({radius: 16, color: 0x7D7B7B, offsetX: 0, offsetY: 2}) } Row({space: 20}) { Column({space: 20}) { Row({space: 20}) { Button('1', {type: ButtonType.Circle}) .width(64).height(64) .fontSize(20).fontColor('#000').fontWeight(FontWeight.Bold) .backgroundColor('#FFFDFD') .borderRadius(32) .shadow({radius: 16, color: 0x7D7B7B, offsetX: 0, offsetY: 2}) Button('2', {type: ButtonType.Circle}) .width(64).height(64) .fontSize(20).fontColor('#000').fontWeight(FontWeight.Bold) .backgroundColor('#FFFDFD') .borderRadius(32) .shadow({radius: 16, color: 0x7D7B7B, offsetX: 0, offsetY: 2}) Button('3', {type: ButtonType.Circle}) .width(64).height(64) .fontSize(20).fontColor('#000').fontWeight(FontWeight.Bold) .backgroundColor('#FFFDFD') .borderRadius(32) .shadow({radius: 16, color: 0x7D7B7B, offsetX: 0, offsetY: 2}) } Row({space: 20}) { Button('%', {type: ButtonType.Circle}) .width(64).height(64) .fontSize(20).fontColor('#000').fontWeight(FontWeight.Bold) .backgroundColor('#FFFDFD') .borderRadius(32) .shadow({radius: 16, color: 0x7D7B7B, offsetX: 0, offsetY: 2}) Button('0', {type: ButtonType.Circle}) .width(64).height(64) .fontSize(20).fontColor('#000').fontWeight(FontWeight.Bold) .backgroundColor('#FFFDFD') .borderRadius(32) .shadow({radius: 16, color: 0x7D7B7B, offsetX: 0, offsetY: 2}) Button('.', {type: ButtonType.Circle}) .width(64).height(64) .fontSize(32).fontColor('#000').fontWeight(FontWeight.Bold) .backgroundColor('#FFFDFD') .borderRadius(32) .shadow({radius: 16, color: 0x7D7B7B, offsetX: 0, offsetY: 2}) } } Column({space: 20}) { Button('=', {type: ButtonType.Capsule}) .width(64).height(148) .fontSize(32).fontColor(0x1296DB).fontWeight(FontWeight.Bold) .backgroundColor('#FFFDFD') .borderRadius(32) .shadow({radius: 16, color: 0x7D7B7B, offsetX: 0, offsetY: 2}) }.margin({left: -20}) } } .padding({left: 20}) } .width('100%') .borderRadius(8) .backgroundColor('#F2F2F2')
是不是看起來程式碼很多,每個Button
除了內容,及個別顏色和字型大小不一樣之外,其他的都是一樣的呢?可以思考以下,如何抽出公用的自定義Button
元件,根據傳參不同顯示不同的按鈕,這部分會在後面的小節中分享。學習之初先是多用,用熟了,才是靈活使用。
思考
在實現功能按鈕區的時候,我給Column
容器元件添加了padding({left: 20})
這個屬性,其代表什麼含義?解決了什麼問題?你還有沒有其他的方法?
小結
本節先對Text
文字元件的用法做了簡單介紹,然後通過之前小節中學習的Column
、Row
、Button
元件實現了標準計算器的功能按鈕區。下一小節將帶你一起實現標準計算器的計算功能和計算曆史留存。