iT邦幫忙

2022 iThome 鐵人賽

DAY 18
0

前言


今天接續昨天,調整卡片樣式。
目標樣式:
https://ithelp.ithome.com.tw/upload/images/20220924/20136048ug84io0Sm5.png

字體大小

參考 MD3 Card
日期我們使用 title medium
https://ithelp.ithome.com.tw/upload/images/20220924/20136048mPQoM9LFpX.png

內文使用 body medium
https://ithelp.ithome.com.tw/upload/images/20220924/20136048Dnn3nlJdXb.png

Text() 設定參數 style 打上 style =MT+Enter 選擇MaterialTheme(android.compose.Material3) ,然後選擇引用字體 typography ,選擇字體樣式 titleMedium 還有 bodyMedium

Card() {
    Column(
        modifier = Modifier.padding(16.dp)
    ) {
        Text(
            text = training.date.toString(),
            style = MaterialTheme.typography.titleMedium
        )
        Text(
            text = training.trainingContext,
            style = MaterialTheme.typography.bodyMedium
        )
    }
}

https://ithelp.ithome.com.tw/upload/images/20220924/20136048IJAu1qtZMY.png

日期底色


設計上有放一個圓邊的裝飾底色給日期用,這裡我用Card 來實踐。首先用Card+Tab 生成Card,再來設定邊緣形狀,這裡有個小技巧可以使用 CircleShape 來自造Card 左右兩側的弧度是50的效果,如果在CircleShapectrl+B 可以看到設定邊角圓弧被定為50RoundedCornerShape(50) ,這樣以後想要調整圓弧大小也可以直接用50RoundedCornerShape 來達成。

再來設定Card 底色,Cardctrl+B 來看預設顏色CardDefaults.cardColors() 直接複製起來用。

CardDefaults.cardColors() +ctrl+B 觀察參數,我要改的是卡片底色 containerColor ,回到Card 設定containerColor = Color.Gray (這裡還沒決定要用什麼顏色,先用灰色加上 TODO來做提醒。

Card(
    shape = CircleShape,
    colors = CardDefaults.cardColors(containerColor = Color.Gray) //TODO check color
) {
    Text(
        text = training.date.toString(),
        style = MaterialTheme.typography.titleMedium,
    )
}

https://ithelp.ithome.com.tw/upload/images/20220924/20136048wInXqsPBXn.png

Aligment

要讓字體置中,可以將 Text 的範圍撐到最大使用 modifier = Modifier.fillMaxWidth()

再來調整 AlignText + Ctrl+B 找到參數叫做textAlign ,型態是TextAlign 。回來設置

textAlign = TextAlign.Center

Card(
    shape = CircleShape,
    colors = CardDefaults.cardColors(containerColor = Color.Gray)
) {
    Text(
        text = training.date.toString(),
        style = MaterialTheme.typography.titleMedium,
        textAlign = TextAlign.Center, //++
        modifier = Modifier.fillMaxWidth() //++
    )
}

https://ithelp.ithome.com.tw/upload/images/20220924/20136048qMerDifTIl.png

接下來調整一下日期卡片和內文之間的距離。設置TextModifier ,用 paddingtop 參數設為 8.dp

Text(
  text = training.trainingContext,
  style = MaterialTheme.typography.bodyMedium,
  modifier = Modifier.padding(top = 8.dp) //++
)

https://ithelp.ithome.com.tw/upload/images/20220924/20136048tZqK23pxJ8.png

日期格式


日期格式使用DateTimeFormatter.ofPattern() ,第一個參數是日期樣式可以參考 JAVA Doc ,常用的有 yyyy代表年、 MM 代表月份、 dd 代表幾號。第二個參數設定時區 Locale.TAIWAN ,這樣才能正確顯示星期幾。

val formatter = DateTimeFormatter.ofPattern("yyyy/MM/dd (E)", Locale.TAIWAN)

formatter 帶入 LocalDateLocalDate.format(formatter)

Card(
    shape = CircleShape,
    colors = CardDefaults.cardColors(containerColor = Color.Gray)//TODO check color
) {
    Text(
        ~~text = training.date.toString(),~~
				text = training.date.format(formatter),
        style = MaterialTheme.typography.titleMedium,
        textAlign = TextAlign.Center,
        modifier = Modifier.fillMaxWidth()
    )
}

https://ithelp.ithome.com.tw/upload/images/20220924/20136048MRRMvJYF3G.png

總結


今天用到了Card 來作為底部裝飾,學會了CircleShape來設定Card的邊角。

Modifier.fillMaxWidth() 將字體內容展開到最寬,配合上TextAlign.Center 做到置中效果。

最後用到日期格式 DateTimeFormatter.ofPattern()LocalDate 設定成想要的格式。

今日運動:
休息


上一篇
Day 17 實作 Grid Layout 和 Card
下一篇
Day 19 使用者互動,如何在 compose 中監聽 click、drag 等動作
系列文
今年一定減成功!Jetpack Compose 做出重訓紀錄APP30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言