最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android JetpackCompose使用教程講解

 更新時(shí)間:2022年10月10日 09:45:24   作者:知奕奕  
在今年的Google/IO大會(huì)上,亮相了一個(gè)全新的 Android 原生 UI 開發(fā)框架-Jetpack Compose, 與蘋果的SwiftIUI一樣,Jetpack Compose是一個(gè)聲明式的UI框架

概況

compose 摒棄了原生開發(fā)模式中的 xml,代碼結(jié)構(gòu)類似于 flutter

compose 僅支持 kotlin,雖然這玩意語法糖多但是也不難學(xué)

compose 可以通過極短的代碼行數(shù)構(gòu)建完善頁面

開啟新工程

首先請去 android 官網(wǎng)下載 android studio;

官網(wǎng)下載速度是正常的,別擔(dān)心;

之后根據(jù)提示安裝 android sdk 以及 ndk,如果必須的話你還可以裝一個(gè)模擬器;

把手機(jī)直接連接到電腦上就可以進(jìn)行真機(jī)調(diào)試了(記得把手機(jī)的調(diào)試模式打開);

一切就緒,打開 android studio,點(diǎn)擊 file->new->new project->empty compose activity

稍等一會(huì),工程很快構(gòu)建完畢

文件結(jié)構(gòu)

創(chuàng)建新工程后,默認(rèn)會(huì)打開 MainActivity.kt 文件,這是我們的主頁面

根結(jié)構(gòu)

class MainActivity2 : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {
            ComposeDemoTheme {
                // A surface container using the 'background' color from the theme
                Surface(
                    modifier = Modifier.fillMaxSize(),
                    color = MaterialTheme.colors.background
                ) {
                    Greeting("Android")
                }
            }
        }
    }
}

setContent 在這里寫入頁面內(nèi)容,通過一個(gè)個(gè)組件逐步構(gòu)造

ComposeDemoTheme 表示根據(jù)默認(rèn)主題包中的內(nèi)容進(jìn)行設(shè)置(默認(rèn)主題包就在和 mainactivity 同級別的 themes 文件夾)

Surface 構(gòu)建頁面表面的一個(gè)組件

拆分方法

為了避免組件過度嵌套導(dǎo)致產(chǎn)生”死亡三角”,務(wù)必記得把必要的組件拆出來作為一個(gè)單獨(dú)的方法寫!

方法寫在本 activity 的 class 內(nèi)部,那么同文件夾內(nèi)的其他 kotlin 文件的方法都不會(huì)沖突;

若寫在 class 外(默認(rèn)),則不同文件夾將可能會(huì)發(fā)生名稱重復(fù)的沖突;

@Composable
fun Greeting(name: String) {
    Text(text = "Hello $name!")
}

加了 @Composable 注解的方法,表示這是一個(gè)組件,該注解必須添加!

該組件方法內(nèi)使用了 text

@Preview(showBackground = true)
@Composable
fun DefaultPreview() {
    ComposeDemoTheme {
        Greeting("Android")
    }
}

compose 內(nèi)置了一個(gè)臨時(shí)預(yù)覽機(jī)制,即 preview;

加了@Preview 注解的代碼表示該代碼將作為臨時(shí)預(yù)覽而展示;

臨時(shí)預(yù)覽的方法不會(huì)對最終編譯生成的結(jié)果產(chǎn)生任何影響?。。?/p>

點(diǎn)擊代碼框右上角的 split,即可拆分為 代碼+預(yù)覽 布局

一切就緒后點(diǎn)擊 build,即可渲染預(yù)覽頁面

官方四節(jié)課教程細(xì)節(jié)剖析

官方教程地址:https://developer.android.google.cn/jetpack/compose/tutorial

data class

data class 類似于 typescript 的 interface,可以理解為定義了一個(gè)對象;

msg: Message 直接將 Message 作為一個(gè)類型來使用;

之后直接在 setContent 里面調(diào)用組件即可!

class MainActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {
            MessageCard(Message("Android", "Jetpack Compose"))
        }
    }
}
data class Message(val author: String, val body: String)
@Composable
fun MessageCard(msg: Message) {
    Text(text = msg.author)
    Text(text = msg.body)
}

組件代碼翻譯

@Composable
fun MessageCard(msg: Message) {
    // 使用padding內(nèi)部撐開,all表示四周撐開
    Row(modifier = Modifier.padding(all = 8.dp)) {
        Image(
            painter = painterResource(R.drawable.profile_picture),
            contentDescription = "Contact profile picture",
            modifier = Modifier
                // 設(shè)置該組件的大小為40dp
                .size(40.dp)
                // 把圖片變成圓形的
                .clip(CircleShape)
        )
        // 在image和column之間添加一個(gè)水平空格!
        Spacer(modifier = Modifier.width(8.dp))
        Column {
            Text(text = msg.author)
            // 這里添加的是一個(gè)垂直空格!
            Spacer(modifier = Modifier.height(4.dp))
            Text(text = msg.body)
        }
    }
}

單例類

教程中我們用到了 SampleData,然而由于外網(wǎng)無法訪問,數(shù)據(jù)集自然下載不了,但是我們可以簡單的模擬一個(gè)數(shù)據(jù)集:

object 創(chuàng)建單例類;

listOf 模擬列表!

object SampleData {
    val conversationData = listOf(
        Message(
            "jack",
            "test name"
        ),
        Message(
            "fakeman",
            "idaofihoeqh iodhoe hfqow " +
                    "ehfsdla hfioeh fowh fldsah lfhoqei hfo" +
                    " hod hsafohewqgjlfjdsnvc,mxbg kjwfhw" +
                    " hoe hfsdhf kwejashd has jhdqwo oiadhf oiha " +
                    "oi dosi awqi jiojagakfjk ladfi jslkf h" +
                    "lwkeh flkadsh flah fioewhfoadshlfhsa"
        ),
    )
}

適配器的替代品

// by表示使用委托,設(shè)置一個(gè)針對于本compose的全局狀態(tài)
// 可以理解為isExpanded是一個(gè)全局變量!
var isExpanded by remember { mutableStateOf(false) }
// clickable設(shè)置column中項(xiàng)目是否可以點(diǎn)擊,以及點(diǎn)擊后執(zhí)行的代碼
// 代碼和vue類似,點(diǎn)一下就反轉(zhuǎn)一下,達(dá)到開啟和收回的效果
Column(modifier = Modifier.clickable { isExpanded = !isExpanded }) {
    ...
    Surface(
        shape = MaterialTheme.shapes.medium,
        elevation = 1.dp,
    ) {
        Text(
            text = msg.body,
            modifier = Modifier.padding(all = 4.dp),
            // 判斷全局狀態(tài)isExpanded值
            // 如果isExpanded為true,那么顯示所有行(即展開)
            // 如果isExpanded為false,那么僅顯示一行(即收縮)
            maxLines = if (isExpanded) Int.MAX_VALUE else 1,
            style = MaterialTheme.typography.body2
        )
    }
}

簡單小動(dòng)畫

// 同樣的委托,注冊全局動(dòng)畫狀態(tài)
// 由于內(nèi)容過于龐雜,后續(xù)將會(huì)詳細(xì)介紹動(dòng)畫狀態(tài)是個(gè)什么東西!
val surfaceColor by animateColorAsState(
    if (isExpanded) MaterialTheme.colors.primary else MaterialTheme.colors.surface,
)

到此這篇關(guān)于Android JetpackCompose使用教程講解的文章就介紹到這了,更多相關(guān)Android JetpackCompose內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Android實(shí)現(xiàn)視頻彈幕功能

    Android實(shí)現(xiàn)視頻彈幕功能

    這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)視頻彈幕功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-11-11
  • Kotlin協(xié)程基礎(chǔ)元素梳理分析

    Kotlin協(xié)程基礎(chǔ)元素梳理分析

    這篇文章我們來講協(xié)程的基礎(chǔ)元素,畢竟協(xié)程是一個(gè)很強(qiáng)大的設(shè)計(jì)模式,深入了解需要花很多的時(shí)間,我們先從簡單開始,其實(shí)學(xué)會(huì)了簡單的使用,基本已經(jīng)可以滿足我們平時(shí)的開發(fā)需要了,話不多說,開始
    2022-11-11
  • Android啟動(dòng)頁優(yōu)化之實(shí)現(xiàn)應(yīng)用秒開

    Android啟動(dòng)頁優(yōu)化之實(shí)現(xiàn)應(yīng)用秒開

    現(xiàn)在很多應(yīng)用都會(huì)在進(jìn)入主界面之前,添加一個(gè)啟動(dòng)頁,然后加入幾秒鐘的廣告,我覺得這個(gè)不能算是 “真正意義上的 “ 啟動(dòng)頁,應(yīng)該叫廣告頁。
    2021-05-05
  • Android 實(shí)現(xiàn)抖音小游戲潛艇大挑戰(zhàn)的思路詳解

    Android 實(shí)現(xiàn)抖音小游戲潛艇大挑戰(zhàn)的思路詳解

    《潛水艇大挑戰(zhàn)》是抖音上的一款小游戲,最近特別火爆,很多小伙伴都玩過。接下來通過本文給大家分享Android 手?jǐn)]抖音小游戲潛艇大挑戰(zhàn)的思路,需要的朋友可以參考下
    2020-04-04
  • android CursorLoader用法介紹

    android CursorLoader用法介紹

    本篇文章介紹了android CursorLoader的使用方法,需要的朋友可以參考一下
    2013-06-06
  • 解決Android啟動(dòng)APP的一瞬間系統(tǒng)欄會(huì)變成藍(lán)色問題

    解決Android啟動(dòng)APP的一瞬間系統(tǒng)欄會(huì)變成藍(lán)色問題

    這篇文章主要介紹了解決Android啟動(dòng)APP的一瞬間系統(tǒng)欄會(huì)變成藍(lán)色問題,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-06-06
  • Android粒子線條效果實(shí)現(xiàn)過程與代碼

    Android粒子線條效果實(shí)現(xiàn)過程與代碼

    這篇文章主要介紹了Android粒子線條效果的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2023-02-02
  • VideoView實(shí)現(xiàn)視頻無縫連續(xù)播放

    VideoView實(shí)現(xiàn)視頻無縫連續(xù)播放

    這篇文章主要為大家詳細(xì)介紹了VideoView實(shí)現(xiàn)視頻無縫連續(xù)播放,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-07-07
  • android實(shí)現(xiàn)直播點(diǎn)贊飄心動(dòng)畫效果

    android實(shí)現(xiàn)直播點(diǎn)贊飄心動(dòng)畫效果

    這篇文章主要為大家詳細(xì)介紹了android實(shí)現(xiàn)直播點(diǎn)贊飄心動(dòng)畫效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • Flutter Widget開發(fā)Shortcuts快捷鍵實(shí)例

    Flutter Widget開發(fā)Shortcuts快捷鍵實(shí)例

    這篇文章主要為大家介紹了Flutter Widget開發(fā)Shortcuts快捷鍵實(shí)例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12

最新評論

若羌县| 汉阴县| 海盐县| 舒兰市| 固镇县| 凉城县| 台前县| 镇沅| 额尔古纳市| 兴义市| 徐汇区| 宜兰市| 精河县| 平泉县| 澄江县| 葵青区| 乌鲁木齐县| 遂昌县| 开远市| 库尔勒市| 中方县| 蒙自县| 望谟县| 兰州市| 广东省| 永川市| 瑞安市| 峨眉山市| 荣昌县| 晋中市| 曲水县| 合川市| 吴江市| 拉萨市| 象州县| 巴彦淖尔市| 锦州市| 安庆市| 什邡市| 恩施市| 榆中县|