Retrofit+Hilt后端请求小项目4--UI界面绘制
2023-09-14 09:13:58 时间
HomeScreen
以下两块分解代码均存放于
HomeScreen.kt
文件下
CharacterImageCard
数据展示通过一块小卡片,使用基础布局即可完成
character
形参为上级 LazyColumn
中的 item 传递而来,下面将补全代码
@Composable
fun CharacterImageCard(character: Character) {
val imagerPainter = rememberImagePainter(data = character.image)
Card(
shape = MaterialTheme.shapes.medium,
modifier = Modifier.padding(16.dp)
) {
Box {
Image(
painter = imagerPainter,
contentDescription = null,
modifier = Modifier
.fillMaxWidth()
.height(200.dp),
contentScale = ContentScale.FillBounds
)
Surface(
color = MaterialTheme.colors.onSurface.copy(alpha = .3f),
modifier = Modifier.align(Alignment.BottomCenter),
contentColor = MaterialTheme.colors.surface
) {
Column(
modifier = Modifier
.fillMaxWidth()
.padding(4.dp)
) {
Text(text = "Real name: ${character.actor}")
Text(text = "Actor name: ${character.name}")
}
}
}
}
}
HomeScreen
主页面渲染逻辑,使用 LazyColumn
渲染 CharacterImageCard
注意组件 CircularProgressIndicator
存在于 androidx.compose.material:material
中,部分情况下会无法自动导入,就需要我们手动 import 后即可
@Composable
fun HomeScreen() {
// 初始化viewmodel
val homeViewModel = viewModel(modelClass = HomeViewModel::class.java)
// 将流转换为state
val state by homeViewModel.state.collectAsState()
LazyColumn {
if (state.isEmpty()) {
item {
CircularProgressIndicator(
modifier = Modifier
.fillMaxSize()
.wrapContentSize(align = Alignment.Center)
)
}
}
items(state) { character: Character ->
CharacterImageCard(character = character)
}
}
}
MainActivity
最后回到我们的 MainActivity.kt
直接调用 HomeScreen 即可渲染
// 注意在这里设置好Android入口点
@AndroidEntryPoint
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
CharacterTheme {
// A surface container using the 'background' color from the theme
Surface(
modifier = Modifier.fillMaxSize(),
color = MaterialTheme.colors.background
) {
HomeScreen()
}
}
}
}
}
成品测试
开始会出现加载条,加载完毕显示卡片
相关文章
- Java项目毕业设计:基于springboot+vue的电影视频网站系统「建议收藏」
- pycharm怎么添加项目_pycharm 其他
- eclipse 导入父子工程_eclipse 导入maven 父子项目
- 项目延期了,怎么办?
- 浅谈持币生息DAPP项目模式系统开发技术讲解代码分析
- UI自动化平台_ui自动化是什么意思
- 【信管2.6】项目可研(二)详细可行性研究
- 【以解决】项目使用feign时候提示bean不能注入feign
- UWB高精度室内定位系统项目案例
- 解决android studio 创建新项目后假死详解手机开发
- Maven自定义绑定插件目标:创建项目的源码jar详解程序员
- 曾经承载贾跃亭野心的项目价格腰斩 为何无人愿意接盘?
- 中国、俄罗斯的高科技巨头加入全球开源项目
- 据闻 WPS Office for Linux 项目中止,计划开源 Linux 代码,金山公司表示否认
- 探索Linux应用开发创造新未来(linux应用开发项目)
- 如何使用Redis实现多项目的隔离(多项目redis怎样区分)