Anonymous
Jetpack Compose,потратьте много времени на рисование пользовательского интерфейса.
Сообщение
Anonymous » 05 дек 2024, 07:23
Ссылка на мой проект: ссылка на мой проект
Нажмите кнопку «Тест» на левой панели навигации и потратьте много времени на рисование «TestApplyView».
Код: Выделить всё
@Composable
fun TestView(testViewModel: TestViewModel) {
val navController = rememberNavController()
Column(
modifier = Modifier.fillMaxSize(),
horizontalAlignment = Alignment.CenterHorizontally
) {
Row(
modifier = Modifier
.fillMaxWidth()
.padding(vertical = 10.dp)
.background(Color.White)
) {
TopTabBar(text = "Apply", R.mipmap.ic_home_view_barrel, onClick = { navController.navigate("Apply") })
TopTabBar(text = "Test", R.mipmap.ic_home_view_barrel, onClick = { navController.navigate("Test") })
TopTabBar(text = "Record", R.mipmap.ic_home_view_barrel, onClick = { navController.navigate("Record") })
TopTabBar(text = "Report", R.mipmap.ic_home_view_barrel, onClick = { navController.navigate("Report") })
}
NavHost(
navController = navController,
startDestination = "Apply"
) {
composable("Apply") { TestApplyView(viewModel = testViewModel) }
composable("Test") { Text("Test") }
composable("Record") { TestRecordView(testViewModel = testViewModel) }
composable("Report") { TestReportView() }
}
}
}
нажмите «Тест», создайте «TestApplyView»
Код: Выделить всё
@Composable
fun TestApplyView(viewModel: TestViewModel) {
Column(modifier = Modifier.fillMaxSize()) {
RackSelectView(viewModel = viewModel)
Row(
modifier = Modifier
.fillMaxSize()
.padding(top = 10.dp)
) {
TubeSelectView(modifier = Modifier.weight(2f))
Spacer(modifier = Modifier.width(10.dp))
ItemSelectView(modifier = Modifier.weight(1f))
}
}
}
Код: Выделить всё
@Composable
fun TubeSelectView(modifier: Modifier) {
val tubes = List(8) { it }
Column(
modifier = modifier
.fillMaxSize()
.background(Color.White)
.border(1.dp, color = Color.Black),
) {
Header()
LazyColumn(modifier = Modifier.weight(1f)) {
items(tubes, key = { it }) { tube ->
TubeItem(tubeIndex = tube + 1)
}
}
Footer()
}
}
@Composable
частное развлечение TubeItem(tubeIndex: Int) {
Код: Выделить всё
val context = LocalContext.current
val sampleTypes = listOf("血清", "血浆", "全血", "尿液")
Row(
modifier = Modifier.fillMaxWidth(),
verticalAlignment = Alignment.CenterVertically
) {
Text(text = tubeIndex.toString(), fontSize = 24.sp, modifier = Modifier.weight(0.5f), textAlign = TextAlign.Center)
OutlinedTextField(
value = "",
onValueChange = { },
modifier = Modifier
.weight(1.2f)
.padding(horizontal = 5.dp),
singleLine = true,
textStyle = TextStyle(fontSize = 18.sp, lineHeight = 24.sp, textAlign = TextAlign.Center)
)
OutlinedTextField(
value = "",
onValueChange = { },
modifier = Modifier
.weight(2.5f)
.padding(horizontal = 5.dp),
singleLine = true,
textStyle = TextStyle(fontSize = 18.sp, lineHeight = 24.sp, textAlign = TextAlign.Center)
)
DropDownMenu(
modifier = Modifier
.weight(1f)
.padding(horizontal = 5.dp),
options = sampleTypes,
onItemSelected = { }
)
DropDownMenu(
modifier = Modifier
.weight(1.2f)
.padding(horizontal = 5.dp),
options = sampleTypes,
onItemSelected = { }
)
OutlinedTextField(
value = "",
onValueChange = { },
modifier = Modifier
.weight(1f)
.padding(horizontal = 5.dp),
singleLine = true,
textStyle = TextStyle(fontSize = 18.sp, lineHeight = 24.sp, textAlign = TextAlign.Center)
)
OutlinedTextField(
value = "",
onValueChange = { },
modifier = Modifier
.weight(1.8f)
.padding(horizontal = 5.dp),
singleLine = true,
textStyle = TextStyle(fontSize = 18.sp, lineHeight = 24.sp, textAlign = TextAlign.Center)
)
IconTubeDelete(
modifier = Modifier.width(60.dp),
size = 32.dp,
onClick = {
Toast.makeText(context, "delete1", Toast.LENGTH_SHORT).show()
}
)
}
}
Я обнаружил, что комментирование OutlinedTextField в элементе управления TubeItem ускоряет отрисовку интерфейса. OutlinedTextField снижает производительность устройства?
Я только начал работать с составом реактивного ранца и действительно не могу найти причину.
Помощьpppp
Подробнее здесь:
https://stackoverflow.com/questions/792 ... to-draw-ui
1733372619
Anonymous
Ссылка на мой проект: ссылка на мой проект Нажмите кнопку «Тест» на левой панели навигации и потратьте много времени на рисование «TestApplyView». [code]@Composable fun TestView(testViewModel: TestViewModel) { val navController = rememberNavController() Column( modifier = Modifier.fillMaxSize(), horizontalAlignment = Alignment.CenterHorizontally ) { Row( modifier = Modifier .fillMaxWidth() .padding(vertical = 10.dp) .background(Color.White) ) { TopTabBar(text = "Apply", R.mipmap.ic_home_view_barrel, onClick = { navController.navigate("Apply") }) TopTabBar(text = "Test", R.mipmap.ic_home_view_barrel, onClick = { navController.navigate("Test") }) TopTabBar(text = "Record", R.mipmap.ic_home_view_barrel, onClick = { navController.navigate("Record") }) TopTabBar(text = "Report", R.mipmap.ic_home_view_barrel, onClick = { navController.navigate("Report") }) } NavHost( navController = navController, startDestination = "Apply" ) { composable("Apply") { TestApplyView(viewModel = testViewModel) } composable("Test") { Text("Test") } composable("Record") { TestRecordView(testViewModel = testViewModel) } composable("Report") { TestReportView() } } } } [/code] нажмите «Тест», создайте «TestApplyView» [code]@Composable fun TestApplyView(viewModel: TestViewModel) { Column(modifier = Modifier.fillMaxSize()) { RackSelectView(viewModel = viewModel) Row( modifier = Modifier .fillMaxSize() .padding(top = 10.dp) ) { TubeSelectView(modifier = Modifier.weight(2f)) Spacer(modifier = Modifier.width(10.dp)) ItemSelectView(modifier = Modifier.weight(1f)) } } } [/code] [code]@Composable fun TubeSelectView(modifier: Modifier) { val tubes = List(8) { it } Column( modifier = modifier .fillMaxSize() .background(Color.White) .border(1.dp, color = Color.Black), ) { Header() LazyColumn(modifier = Modifier.weight(1f)) { items(tubes, key = { it }) { tube -> TubeItem(tubeIndex = tube + 1) } } Footer() } } [/code] @Composable частное развлечение TubeItem(tubeIndex: Int) { [code]val context = LocalContext.current val sampleTypes = listOf("血清", "血浆", "全血", "尿液") Row( modifier = Modifier.fillMaxWidth(), verticalAlignment = Alignment.CenterVertically ) { Text(text = tubeIndex.toString(), fontSize = 24.sp, modifier = Modifier.weight(0.5f), textAlign = TextAlign.Center) OutlinedTextField( value = "", onValueChange = { }, modifier = Modifier .weight(1.2f) .padding(horizontal = 5.dp), singleLine = true, textStyle = TextStyle(fontSize = 18.sp, lineHeight = 24.sp, textAlign = TextAlign.Center) ) OutlinedTextField( value = "", onValueChange = { }, modifier = Modifier .weight(2.5f) .padding(horizontal = 5.dp), singleLine = true, textStyle = TextStyle(fontSize = 18.sp, lineHeight = 24.sp, textAlign = TextAlign.Center) ) DropDownMenu( modifier = Modifier .weight(1f) .padding(horizontal = 5.dp), options = sampleTypes, onItemSelected = { } ) DropDownMenu( modifier = Modifier .weight(1.2f) .padding(horizontal = 5.dp), options = sampleTypes, onItemSelected = { } ) OutlinedTextField( value = "", onValueChange = { }, modifier = Modifier .weight(1f) .padding(horizontal = 5.dp), singleLine = true, textStyle = TextStyle(fontSize = 18.sp, lineHeight = 24.sp, textAlign = TextAlign.Center) ) OutlinedTextField( value = "", onValueChange = { }, modifier = Modifier .weight(1.8f) .padding(horizontal = 5.dp), singleLine = true, textStyle = TextStyle(fontSize = 18.sp, lineHeight = 24.sp, textAlign = TextAlign.Center) ) IconTubeDelete( modifier = Modifier.width(60.dp), size = 32.dp, onClick = { Toast.makeText(context, "delete1", Toast.LENGTH_SHORT).show() } ) } [/code] } Я обнаружил, что комментирование OutlinedTextField в элементе управления TubeItem ускоряет отрисовку интерфейса. OutlinedTextField снижает производительность устройства? Я только начал работать с составом реактивного ранца и действительно не могу найти причину. Помощьpppp Подробнее здесь: [url]https://stackoverflow.com/questions/79253361/jetpack-compose-spend-a-long-time-to-draw-ui[/url]