为什么图片不显示:package com.example.carseting.View
import androidx.compose.foundation.Image
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.width
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.foundation.verticalScroll
import androidx.compose.material3.ButtonDefaults
import androidx.compose.material3.SegmentedButtonColors
import androidx.compose.material3.SegmentedButtonDefaults
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.painterResource
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import com.example.carseting.R
import com.example.carseting.Model.SegmentedOption
@Composable
fun CommonOperationScreen()
{
val shape = RoundedCornerShape(5.dp)
val colors= ButtonDefaults.buttonColors(
containerColor = Color(0xFFE0E0F0), // 背景颜色
contentColor = Color.Black // 黑色文字/图标
)// 默认背景色
// 分项选择button的样式
val colors2 = SegmentedButtonDefaults.colors()
val options = listOf<SegmentedOption>(
SegmentedOption(
key = "OFF",
selected_icon = painterResource(R.drawable.carsetting_icon_off_s),
unselected_icon = painterResource(R.drawable.carsetting_icon_off_n),
text = "OFF"
),
SegmentedOption(
key = "AUTO",
unselected_icon = painterResource(R.drawable.carsetting_icon_auto_n),
selected_icon = painterResource(R.drawable.carsetting_icon_auto_s),
text = "AUTO"
),
SegmentedOption(
key = "POSITON",
unselected_icon = painterResource(R.drawable.carsetting_icon_position),
selected_icon = painterResource(R.drawable.carsetting_icon_position_s),
text = "POSITON"
),
SegmentedOption(
key = "LOW_BEAM",
unselected_icon = painterResource(R.drawable.carsetting_icon_low_beam),
selected_icon = painterResource(R.drawable.carsetting_icon_low_beam_s),
text = "LOW_BEAM"
)
)
Column(
modifier = Modifier.fillMaxSize()
) {
Column(
modifier = Modifier.weight(1f).verticalScroll(rememberScrollState()), // 垂直滚动,用weight(1f)限制滚动组件的高度
verticalArrangement = Arrangement.Center, // 垂直平均分布,居中对齐
horizontalAlignment = Alignment.CenterHorizontally
) {
Image(
painter = painterResource(id = R.drawable.carsetting_pic_car02),
contentDescription = "这是一张车辆图片", // 必须有这句,否则会报错,这是无障碍提示语
modifier = Modifier.width(260.dp)
)
Row (
modifier = Modifier.fillMaxWidth().padding(1.dp),
horizontalArrangement = Arrangement.Center, // 垂直平均分布,居中对齐
verticalAlignment = Alignment.CenterVertically
){
ButtonShape(
shape = shape,
colors = colors,
width = 80.dp,
height = 60.dp,
id = R.drawable.carsetting_icon_hbx_n,
start = 0.dp,
end = 0.dp,
fontSize = 10.sp,
contentDescription = "这是后备箱的按钮",
text = "后备箱",
onClick = {}
)
Spacer(modifier = Modifier.width(5.dp))
ButtonShape(
shape = shape,
colors = colors,
width = 80.dp,
height = 60.dp,
start = 5.dp,
end = 5.dp,
id = R.drawable.carsetting_icon_cdk_n,
fontSize = 10.sp,
contentDescription = "这是充电口的按钮",
text = "充电口",
onClick = {}
)
Spacer(modifier = Modifier.width(5.dp))
ButtonShape(
shape = shape,
colors = colors,
width = 100.dp,
height = 60.dp,
start = 15.dp,
end = 15.dp,
id = R.drawable.carsetting_icon_left_ccs_n,
fontSize = 10.sp,
contentDescription = "这是左后窗锁止的按钮",
text = "左后窗锁止",
onClick = {}
)
}
Row(
modifier = Modifier.fillMaxWidth().padding(16.dp),
horizontalArrangement = Arrangement.Center, // 垂直平均分布,居中对齐
verticalAlignment = Alignment.CenterVertically
) {
ButtonShape(
shape = shape,
colors = colors,
width = 100.dp,
height = 60.dp,
start = 15.dp,
end = 15.dp,
id = R.drawable.carsetting_icon_right_ccs_n,
fontSize = 10.sp,
contentDescription = "这是右后窗锁止的按钮",
text = "右后窗锁止",
onClick = {}
)
Spacer(modifier = Modifier.width(5.dp))
ButtonShape(
shape = shape,
colors = colors,
width = 100.dp,
height = 60.dp,
start = 15.dp,
end = 15.dp,
id = R.drawable.carsetting_icon_hsjtj_n,
fontSize = 10.sp,
contentDescription = "这是后视镜调节的按钮",
text = "后视镜调节",
onClick = {}
)
}
Row (
modifier = Modifier.fillMaxWidth().padding(16.dp),
horizontalArrangement = Arrangement.Center, // 垂直平均分布,居中对齐
verticalAlignment = Alignment.CenterVertically
){
ButtonShape(
shape = shape,
colors = colors,
width = 100.dp,
height = 60.dp,
start = 15.dp,
end = 15.dp,
id = R.drawable.carsetting_icon_hsj_n,
fontSize = 10.sp,
contentDescription = "这是后视镜折叠的按钮",
text = "后视镜折叠",
onClick = {}
)
Spacer(modifier = Modifier.width(5.dp))
ButtonShape(
shape = shape,
colors = colors,
width = 80.dp,
height = 60.dp,
start = 5.dp,
end = 5.dp,
id = R.drawable.carsetting_icon_zdy_n,
fontSize = 10.sp,
contentDescription = "这是自定义按钮",
text = "自定义",
onClick = {}
)
}
// 大灯控制
SegmentSelectionButton(
options = options,
initialSelectedKey = "OFF",
onOptionSelected = {},
shape = RoundedCornerShape(5.dp),
colors = colors2,
text = "大灯控制",
fontSize = 20.sp,
start = 2.dp,
end = 100.dp,
iconSize = 18.dp,
)
}
}
}
@Preview
@Composable
fun CommonOperationScreenPreview(){
CommonOperationScreen()
}
package com.example.carseting.View
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.padding
import androidx.compose.material3.Icon
import androidx.compose.material3.SegmentedButton
import androidx.compose.material3.SegmentedButtonColors
import androidx.compose.material3.SegmentedButtonDefaults
import androidx.compose.material3.SingleChoiceSegmentedButtonRow
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Shape
import androidx.compose.ui.layout.ModifierLocalBeyondBoundsLayout
import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.TextUnit
import androidx.compose.ui.unit.dp
import com.example.carseting.Model.SegmentedOption
@Composable
fun SegmentSelectionButton(
options: List<SegmentedOption>, // 分段选项列表
initialSelectedKey: String = options.firstOrNull()?.key?:"", // 初始化选中项
onOptionSelected: (SegmentedOption) -> Unit, // 选中项变化回调
shape: Shape, // 按钮形状
colors: SegmentedButtonColors = SegmentedButtonDefaults.colors(),
text: String,
fontSize: TextUnit,
start: Dp,
end: Dp,
iconSize: Dp
){
var selectedKey by remember { mutableStateOf(initialSelectedKey) }
Column(
modifier = Modifier.fillMaxSize()
) {
Text(
text = text,
fontSize = fontSize,
modifier = Modifier.padding(start = start, end = end, bottom = 5.dp)
)
SingleChoiceSegmentedButtonRow (
modifier = Modifier.padding(1.dp)
) {
options.forEach { option ->
val isSelected = selectedKey == option.key
SegmentedButton(
selected = isSelected,
onClick = {
selectedKey = option.key
onOptionSelected(option)
},
shape = shape,
//colors = colors,
icon = {
SegmentedButtonDefaults.Icon(
active = selectedKey == option.key, // 表示当前索引下的按钮是否选中状态,影响的是显示的图标样式
activeContent = { // 设置选中时的图标,这里设置的就是带圆形的✓。
option.selected_icon?.let {
Icon(
painter = it,
contentDescription = "",
modifier = Modifier.fillMaxSize()
)
}
},
inactiveContent = { // 设置未选中时的图标,这里设置的就是带圆形的✓。
option.unselected_icon?.let {
Icon(
painter = it,
contentDescription = "",
modifier = Modifier.fillMaxSize()
)
}
}
)
}
) {
}
}
}
}
}
package com.example.carseting.Model
import androidx.compose.ui.graphics.painter.Painter
data class SegmentedOption(
val key: String, // 选择项唯一标识
val selected_icon: Painter?, // 图标资源
val unselected_icon: Painter?, // 图标资源
val text: String, // 文字内容
)
最新发布