老套路先看图:PicuterShow/GIF 2021-12-31 18-26-59.gif · xiayiye5/ComposeStudy - Gitee.com

这里面涉及的知识点比较多主要有:

1.AS版本建议使用最新的白狐版本,注意compose目前仅支持kotlin语言开发

2.列表控件LazyColumn

3.compose如何加载网络图片

4.布局如何编写

第一步使用最新版本AS创建一个compose项目,创建后等待库下载完成会自定配置compose环境

android comboBox android combobox 展示示例_android comboBox

android comboBox android combobox 展示示例_android_02

第二步:得先依赖网络图片库

implementation("io.coil-kt:coil:1.4.0")
 implementation("io.coil-kt:coil-compose:1.4.0")

第三步:

开始编写首页布局

class MainActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {
            ComposeStudyTheme {
                // A surface container using the 'background' color from the theme
                Surface(color = MaterialTheme.colors.background) {
                    Greeting()
                }
            }
        }
    }
}

@Composable
fun Greeting() {
//这个就是首页布局
    HomeShow()
}

@Preview(showBackground = true)
@Composable
fun DefaultPreview() {
    ComposeStudyTheme {
        Greeting()
    }
}

再看下首页布局怎么样的

package com.example.composestudy.ui.widget

import android.widget.Toast
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.absolutePadding
import androidx.compose.material.Button
import androidx.compose.material.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.unit.dp
import com.example.composestudy.ui.widget.MessageWidget.Companion.MessageList

/**
 * 项目名称 : ComposeStudy
 * 项目路径 : com.example.composestudy.ui.widget
 * 当前作者 : xiayiye5
 * 创建时间 : 2021/12/31 17:56
 */
class HomeWidget {
    companion object {
        @Composable
        fun HomeShow() {
            // 获取图片
            Column(
                verticalArrangement = Arrangement.Top,
                modifier = Modifier.absolutePadding(20.dp, 20.dp, 20.dp, 20.dp)
            ) {
                Text(text = "风景列表展示")
//        ImageTest()
                val current = LocalContext.current
                Button(
                    onClick = { Toast.makeText(current, "哈哈哈哈", Toast.LENGTH_SHORT).show() }) {
                    Text("点我")
                }
//下面就是列表布局的数据
                MessageList(
                    listOf(
                        "Hello",
                        "Android",
                        "我超❤ JetPack Compose的!",
                        "三天打鱼",
                        "两天晒网",
                        "葫芦岛上卖葫芦",
                        "上海水来自海上",
                        "江东父老有江东",
                        "乌江自刎有霸王"
                    )
                )
            }
        }
    }

}

再看下MessageList里面的东西

package com.example.composestudy.ui.widget

import android.widget.Toast
import androidx.compose.foundation.clickable
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.itemsIndexed
import androidx.compose.material.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext
import com.example.composestudy.ImageTest
import com.example.composestudy.ui.widget.NetworkImgWidget.Companion.NetworkImg

/**
 * 项目名称 : ComposeStudy
 * 项目路径 : com.example.composestudy.ui.widget
 * 当前作者 : xiayiye5
 * 创建时间 : 2021/12/31 18:00
 */
class MessageWidget {
    companion object {
        @Composable
        fun MessageList(messages: List<String>) {
// 值可
            val current = LocalContext.current// 以是 List或者Array两种方式
            //LazyColum这个控件类似android中的listview
            LazyColumn {
//        Modifier.clickable(onClick = {
//            Toast.makeText(current, "点击了", Toast.LENGTH_LONG).show()
//        })
//        items(messages.size) { message ->//遍历索引的方式
//            Text(text = messages[message])
//        }
//        items(items = messages) { message -> //遍历内容
//            Text(text = message)
//        }
                //itemsIndexed代表每个item布局,跟listview里面的item布局一个意思
                itemsIndexed(items = messages) { index, item -> //遍历内容和索引
                    if (index == 0) {
                        //交表0位置设置不一样的布局
                        ImageTest()
                    }
                    //这里是每个item对应的标题(角标0除外)
                    Text(
                        text = "索引:$index -- 内容:$item",
                        Modifier.clickable(enabled = true, onClick = {
                            Toast.makeText(current, "点击了$item", Toast.LENGTH_SHORT).show()
                        })
                    )
                    //这里是列表需要展示的图片
                    NetworkImg(index)
                }
            }
        }
    }
}

再看下NetworkImg布局怎么写的

package com.example.composestudy.ui.widget

import androidx.compose.foundation.Image
import androidx.compose.foundation.layout.size
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
import coil.compose.rememberImagePainter

/**
 * 项目名称 : ComposeStudy
 * 项目路径 : com.example.composestudy.ui.widget
 * 当前作者 : xiayiye5
 * 创建时间 : 2021/12/31 18:03
 */
class NetworkImgWidget {
    companion object {
        @Composable
        fun NetworkImg(index: Int) {
            val imgList = listOf(
                "https://img1.baidu.com/it/u=2943699027,12737242&fm=253&fmt=auto&app=120&f=JPEG?w=781&h=500",
                "https://img-blog.csdnimg.cn/20210823085620179.jpeg",
                "https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fphoto.tuchong.com%2F7778538%2Ff%2F449478719.jpg&refer=http%3A%2F%2Fphoto.tuchong.com&app=2002&size=f9999,10000&q=a80&n=0",
                "https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fphoto.tuchong.com%2F1454835%2Ff%2F8764156.jpg&refer=http%3A%2F%2Fphoto.tuchong.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=jpeg",
                "https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fimg8.zol.com.cn%2Fbbs%2Fupload%2F19768%2F19767286.jpg&refer=http%3A%2F%2Fimg8.zol.com.cn&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=jpeg",
                "https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fphoto.tuchong.com%2F5063625%2Ff%2F756815784.jpg&refer=http%3A%2F%2Fphoto.tuchong.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=jpeg",
                "https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fimg.pconline.com.cn%2Fimages%2Fupload%2Fupc%2Ftx%2Fphotoblog%2F1312%2F20%2Fc0%2F29812058_1387481203947.jpg&refer=http%3A%2F%2Fimg.pconline.com.cn&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=jpeg",
                "https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fimg.pconline.com.cn%2Fimages%2Fupload%2Fupc%2Ftx%2Fphotoblog%2F1404%2F29%2Fc3%2F33695617_33695617_1398756004682.jpg&refer=http%3A%2F%2Fimg.pconline.com.cn&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=jpeg",
                "https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fpp.qn.img-space.com%2Fg1%2FM00%2F08%2F5B%2FCg-4q1dzGseIXQSRAA4uyv-86_sAATFWQDWz-kADi7i541.jpg%3FimageView2%2F2%2Fw%2F1200%2Fq%2F100%2Fignore-error%2F1%2F&refer=http%3A%2F%2Fpp.qn.img-space.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=jpeg"
            )
            Image(
                modifier = Modifier.size(1000.dp, 300.dp),
//        painter = rememberImagePainter("https://img-blog.csdnimg.cn/20210823085620179.jpeg"),
                painter = rememberImagePainter(imgList[index]),
                contentDescription = null
            )
        }
    }
}

0基础初学者看着可能比较复杂,我提供了一份源码

ComposeStudy项目源码下载:源码下载