Jetpack(七)Compose 認(rèn)識(shí)<2>

Layout 布局

UI元素是分層的领追,元素包含在其他元素中。 在Compose中响逢,您可以通過從其他可組合函數(shù)中調(diào)用可組合函數(shù)來構(gòu)建UI層次結(jié)構(gòu)蔓腐。

Column 布局

@Composable
fun NewStory(){
    Column{
        Text("起靈老師今天再發(fā)呆")
        Text("靖哥哥今天在練字")
        Text("阿朱今天在打游戲")
    }
}

Modifier

給Column 添加Modifier,Modifier 更像開發(fā)Android之前xml的布局修飾,代碼里面也可以修飾龄句,將兩者結(jié)合的產(chǎn)物。用前端的Style來說明似乎更加合理散罕,接觸過前端css分歇,vue等,會(huì)有更加明顯的體會(huì)欧漱。

截屏2021-02-17 18.33.57.png

添加圖片

@Preview(showBackground = true)
@Composable
fun NewsStoryImagePreview() {
    Column(
        modifier = Modifier.padding(16.dp)
    ) {
        Image(imageVector = vectorResource(id = R.drawable.avatar_1),
            contentDescription = "avatar")
        Text("A day in Shark Fin Cove")
        Text("Davenport, California")
        Text("December 2018")
    }
}
截屏2021-02-17 18.42.16.png
@Preview(showBackground = true)
@Composable
fun NewsStoryImagePreview2() {
    val image = imageResource(id = R.drawable.avatar_2)
    Column(
        modifier = Modifier.padding(16.dp)
    ) {
        val imageModifier = Modifier
            .preferredHeight(180.dp)
            .fillMaxWidth()
        Image(
            bitmap = image,
            contentDescription = "avatar",
            modifier = imageModifier,
            contentScale = ContentScale.Crop)

        Text("A day in Shark Fin Cove")
        Text("Davenport, California")
        Text("December 2018")
    }
}

Material design

應(yīng)用在圖形职抡,如圓角圖形

@Composable
fun NewsStoryShape() {
    val image = imageResource(R.drawable.ic_launcher_background)
    Column(
        modifier = Modifier.padding(16.dp)
    ) {
        val imageModifier = Modifier
            .preferredHeight(180.dp)
            .fillMaxWidth()
            .clip(shape = RoundedCornerShape(4.dp))

        Image(image,
            "avatar",
            modifier = imageModifier,
            contentScale = ContentScale.Crop)
        Spacer(Modifier.preferredHeight(16.dp))

        Text("A day in Shark Fin Cove")
        Text("Davenport, California")
        Text("December 2018")
    }
}

給Text 添加Style

@Preview(showBackground = true)
@Composable
fun NewsStoryStyleText() {
//    val image = imageResource(R.drawable.ic_launcher_background)
    MaterialTheme {
        val typography = MaterialTheme.typography
        Column(
            modifier = Modifier.padding(16.dp)
        ) {
            val imageModifier = Modifier
                .preferredHeight(180.dp)
                .fillMaxWidth()
                .clip(shape = RoundedCornerShape(4.dp))

            Image(
                vectorResource(id = R.drawable.avatar_6),
                "avatar",
                modifier = imageModifier,
                contentScale = ContentScale.Crop
            )
            Spacer(Modifier.preferredHeight(16.dp))

            Text(
                "A day wandering through the sandhills " +
                        "in Shark Fin Cove, and a few of the " +
                        "sights I saw",
                style = typography.h6,
                maxLines = 2,
                overflow = TextOverflow.Ellipsis)
            Text("Davenport, California",
                style = typography.body2)
            Text("December 2018",
                style = typography.body2)
        }
    }
}
截屏2021-02-17 19.45.18.png

第二個(gè)例子分析

底部導(dǎo)航

package top.zcwfeng.compose.mydemo.ui

import androidx.annotation.DrawableRes
import androidx.compose.foundation.background
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.*
import androidx.compose.material.Icon
import androidx.compose.material.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.res.vectorResource
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import androidx.compose.ui.viewinterop.viewModel
import top.zcwfeng.compose.mydemo.R
import top.zcwfeng.compose.mydemo.WeViewModel
import top.zcwfeng.compose.mydemo.ui.theme.MyDemoTheme
import top.zcwfeng.compose.mydemo.ui.theme.WeTheme

@Composable
fun WeBottomBar(selected: Int) {
    val viewModel: WeViewModel = viewModel()
    Row(Modifier.background(WeTheme.colors.bottomBar)) {
        TabItem(if (selected == 0) R.drawable.ic_chat_filled else R.drawable.ic_chat_outlined,
                "聊天",
                if (selected == 0) WeTheme.colors.iconCurrent else WeTheme.colors.icon,
                Modifier
                        .clickable {
                            viewModel.selectedTab = 0
                        }
                        .weight(1f))
        TabItem(if (selected == 1) R.drawable.ic_contacts_filled else R.drawable.ic_contacts_outlined,
                "通訊錄",
                if (selected == 1) WeTheme.colors.iconCurrent else WeTheme.colors.icon,
                Modifier
                        .clickable {
                            viewModel.selectedTab = 1
                        }
                        .weight(1f))
        TabItem(if (selected == 2) R.drawable.ic_discover_filled else R.drawable.ic_discover_outlined,
                "發(fā)現(xiàn)",
                if (selected == 2) WeTheme.colors.iconCurrent else WeTheme.colors.icon,
                Modifier
                        .clickable {
                            viewModel.selectedTab = 2
                        }
                        .weight(1f))
        TabItem(if (selected == 3) R.drawable.ic_me_filled else R.drawable.ic_me_outlined,
                "我",
                if (selected == 3) WeTheme.colors.iconCurrent else WeTheme.colors.icon,
                Modifier
                        .clickable {
                            viewModel.selectedTab = 3
                        }
                        .weight(1f))

    }
}

@Composable
private fun TabItem(@DrawableRes iconId: Int, title: String, color: Color, modifier: Modifier = Modifier) {
    Column(modifier.padding(vertical = 8.dp), horizontalAlignment = Alignment.CenterHorizontally)
    {
        Icon(vectorResource(iconId), title,Modifier/*.unread(true)*/.size(24.dp), tint = color)
        Text(title, fontSize = 11.sp, color = color)
    }
}


@Preview(showBackground = true)
@Composable
fun TabItemPreview() {
    TabItem(iconId = R.drawable.ic_chat_filled, title = "我的", WeTheme.colors.icon)
}

@Preview(showBackground = true)
@Composable
fun WeBottomBarPreView() {
    MyDemoTheme {
        WeBottomBar(selected = 0)
    }
}

@Preview(showBackground = true)
@Composable
fun WeBottomBarPreViewDark() {
    MyDemoTheme(WeTheme.Theme.Dark) {
        WeBottomBar(selected = 0)
    }
}

@Preview(showBackground = true)
@Composable
fun WeBottomBarPreViewNewYear() {
    MyDemoTheme(WeTheme.Theme.NewYear) {
        WeBottomBar(selected = 1)
    }
}

Modifier .clickable

添加點(diǎn)擊事件

Jetpack前面部分基礎(chǔ)知識(shí)分享:

Jetpack(一)Lifecycle和LiveData
JetPacks之Lifecycles原理
JetPack之 LifeCycle LiveData

Jetpack(二)之DataBinding

Jetpack(三) 之 Room 與 ViewModel
Jetpack 之 ViewModel 原理

Jetpack (四) 之 Navigation
Jetpack Navigation 原理淺析

JetPack (五)之 Paging 分頁(yè)庫(kù)

Jetpack(六) 之 WorkManager
Jetpack WorkManager 原理

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
禁止轉(zhuǎn)載,如需轉(zhuǎn)載請(qǐng)通過簡(jiǎn)信或評(píng)論聯(lián)系作者误甚。
  • 序言:七十年代末缚甩,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子窑邦,更是在濱河造成了極大的恐慌擅威,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,807評(píng)論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件冈钦,死亡現(xiàn)場(chǎng)離奇詭異郊丛,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,284評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門厉熟,熙熙樓的掌柜王于貴愁眉苦臉地迎上來导盅,“玉大人,你說我怎么就攤上這事揍瑟“追” “怎么了?”我有些...
    開封第一講書人閱讀 169,589評(píng)論 0 363
  • 文/不壞的土叔 我叫張陵绢片,是天一觀的道長(zhǎng)滤馍。 經(jīng)常有香客問我,道長(zhǎng)杉畜,這世上最難降的妖魔是什么纪蜒? 我笑而不...
    開封第一講書人閱讀 60,188評(píng)論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮此叠,結(jié)果婚禮上纯续,老公的妹妹穿的比我還像新娘。我一直安慰自己灭袁,他們只是感情好猬错,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,185評(píng)論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著茸歧,像睡著了一般倦炒。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上软瞎,一...
    開封第一講書人閱讀 52,785評(píng)論 1 314
  • 那天逢唤,我揣著相機(jī)與錄音,去河邊找鬼涤浇。 笑死鳖藕,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的只锭。 我是一名探鬼主播著恩,決...
    沈念sama閱讀 41,220評(píng)論 3 423
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼蜻展!你這毒婦竟也來了喉誊?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,167評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤纵顾,失蹤者是張志新(化名)和其女友劉穎伍茄,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體施逾,經(jīng)...
    沈念sama閱讀 46,698評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡幻林,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,767評(píng)論 3 343
  • 正文 我和宋清朗相戀三年贞盯,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片沪饺。...
    茶點(diǎn)故事閱讀 40,912評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡躏敢,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出整葡,到底是詐尸還是另有隱情件余,我是刑警寧澤,帶...
    沈念sama閱讀 36,572評(píng)論 5 351
  • 正文 年R本政府宣布遭居,位于F島的核電站啼器,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏俱萍。R本人自食惡果不足惜端壳,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,254評(píng)論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望枪蘑。 院中可真熱鬧损谦,春花似錦、人聲如沸岳颇。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,746評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽话侧。三九已至栗精,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間瞻鹏,已是汗流浹背悲立。 一陣腳步聲響...
    開封第一講書人閱讀 33,859評(píng)論 1 274
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留新博,地道東北人薪夕。 一個(gè)月前我還...
    沈念sama閱讀 49,359評(píng)論 3 379
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像叭披,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子玩讳,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,922評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容