refactor(ui): 重构订单相关界面布局

- 新增 NewOrderItem 组件用于统一订单展示样式
- 优化 GoAccidentSiteActivity、GoToDestinationActivity 和 NewOrderActivity 的界面布局
-移除冗余代码,提高代码复用性
- 调整样式和间距,提升用户体验
This commit is contained in:
songzhiling
2025-05-29 10:29:10 +08:00
parent 3344e5acd8
commit 405f732502
20 changed files with 928 additions and 728 deletions

View File

@ -58,7 +58,7 @@ publishing {
release(MavenPublication) {
groupId = 'io.github.szl9'
artifactId = 'zd_servicing'
version = "1.0.1.9.9.120"
version = "1.0.1.9.9.126"
pom {
packaging = "aar"
@ -149,8 +149,8 @@ dependencies {
androidTestApi libs.androidx.espresso.core
androidTestApi platform(libs.androidx.compose.bom)
androidTestApi libs.androidx.ui.test.junit4
debugApi libs.androidx.ui.tooling
debugApi libs.androidx.ui.test.manifest
debugApi libs.ui.tooling
api libs.coil.compose
api libs.coil.gif

View File

@ -33,6 +33,7 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import com.za.base.NetworkRouteSelectionActivity
@ -53,16 +54,16 @@ fun AppTipsView() {
when (warnBean) {
is NetWarnBean -> {
NetworkWeakView(warnBean as NetWarnBean)
NetworkWeakView()
}
else -> {}
}
}
@Preview
@Composable
fun NetworkWeakView(netWarnBean : NetWarnBean) {
fun NetworkWeakView() {
val context = LocalContext.current
AnimatedVisibility(context !is NetworkRouteSelectionActivity,
@ -97,10 +98,10 @@ fun NetworkWeakView(netWarnBean : NetWarnBean) {
Spacer(modifier = Modifier.width(5.dp))
Text(text = "当前网络异常,可以在线路检测中检测线路并切换",
Text(text = "检测线路并切换",
style = MaterialTheme.typography.bodyMedium,
color = Color(0xFF757575),
fontSize = 12.sp)
fontSize = 10.sp)
}
Box(modifier = Modifier

View File

@ -30,6 +30,9 @@ object CallLogManager {
var phoneCallContactBean : ContactRecordBean? = null
fun uploadCallLog(context : Context) {
if (GlobalData.token.isNullOrEmpty()) {
return
}
if (ActivityCompat.checkSelfPermission(context,
Manifest.permission.READ_CALL_LOG) != PackageManager.PERMISSION_GRANTED
) {

View File

@ -5,10 +5,9 @@ import android.app.Activity
import android.content.Context
import android.content.Intent
import android.content.pm.PackageManager
import android.net.Uri
import androidx.appcompat.app.AppCompatActivity
import androidx.core.app.ActivityCompat
import com.blankj.utilcode.util.ActivityUtils
import androidx.core.net.toUri
import com.blankj.utilcode.util.ToastUtils
import com.za.call.CallLogManager
import com.za.call.ContactRecordBean
@ -94,6 +93,6 @@ fun Context.callPhone(phone : String?) {
taskCode = GlobalData.currentOrder?.taskCode,
phone = phone)
}
val intentPhone = Intent(Intent.ACTION_DIAL, Uri.parse("tel:$phone"))
ActivityCompat.startActivity(this, intentPhone, null)
val intentPhone = Intent(Intent.ACTION_DIAL, "tel:$phone".toUri())
this.startActivity(intentPhone)
}

View File

@ -5,7 +5,6 @@ import android.content.Intent
import android.os.Build
import android.os.Handler
import android.os.Looper
import androidx.compose.foundation.BorderStroke
import androidx.compose.foundation.background
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Arrangement
@ -19,13 +18,8 @@ import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.width
import androidx.compose.foundation.layout.wrapContentHeight
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.foundation.verticalScroll
import androidx.compose.material3.BottomSheetScaffold
import androidx.compose.material3.Button
import androidx.compose.material3.ButtonDefaults
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.HorizontalDivider
import androidx.compose.material3.SheetValue
@ -62,7 +56,6 @@ import com.amap.api.maps.model.LatLngBounds
import com.amap.api.maps.model.MarkerOptions
import com.amap.api.maps.model.PolylineOptions
import com.za.base.BaseActivity
import com.za.base.theme.headBgColor
import com.za.base.view.CommonDialog
import com.za.base.view.HeadViewNotBack
import com.za.bean.JpushBean
@ -223,196 +216,18 @@ private fun AcceptOrderScreen(jpushBean : JpushBean?, vm : NewOrderVm = viewMode
BottomSheetScaffold(scaffoldState = scaffoldState,
topBar = { HeadViewNotBack(title = "新订单") },
sheetContent = {
Column(modifier = Modifier
.fillMaxWidth()
.wrapContentHeight()
.background(Color.White)
.verticalScroll(rememberScrollState())) { // 滑动指示器
Box(modifier = Modifier
.fillMaxWidth()
.padding(vertical = 8.dp)
.background(Color.White), contentAlignment = Alignment.Center) {
Box(modifier = Modifier
.width(32.dp)
.height(4.dp)
.background(color = Color(0xFFE0E0E0), shape = RoundedCornerShape(2.dp)))
}
// 滑动指示器和订单类型行
Row(modifier = Modifier
.fillMaxWidth()
.padding(horizontal = 16.dp, vertical = 12.dp),
horizontalArrangement = Arrangement.SpaceBetween,
verticalAlignment = Alignment.CenterVertically) {
Text(text = uiState.value.jpushBean?.serviceTypeName ?: "",
fontSize = 18.sp,
fontWeight = FontWeight.Bold,
color = Color.Black)
// 修改倒计时显示
Text(text = if (uiState.value.isTimeout) "已超时" else "${uiState.value.remainingTime}S",
color = Color(0xFFFF4D4F),
fontSize = 20.sp,
fontWeight = FontWeight.Bold)
}
// 添加距离和时间信息
// 距离和时间信息
Row(modifier = Modifier
.fillMaxWidth()
.padding(horizontal = 16.dp, vertical = 12.dp),
horizontalArrangement = Arrangement.SpaceBetween,
verticalAlignment = Alignment.CenterVertically) {
Text(text = if (uiState.value.estimatedArrivalTime.isNotEmpty()) "预计到达: ${uiState.value.estimatedArrivalTime}"
else "计算中...", color = Color(0xFF666666), fontSize = 14.sp)
Text(text = if (uiState.value.remainingDistance > 0) "距离救援地: %.1fkm".format(
uiState.value.remainingDistance / 1000f)
else "计算中...", color = Color(0xFFFF4D4F), fontSize = 14.sp)
}
HorizontalDivider(modifier = Modifier
.fillMaxWidth()
.alpha(0.1f))
// 订单信息
Column(modifier = Modifier
.fillMaxWidth()
.padding(horizontal = 16.dp, vertical = 12.dp)) { // 订单标签
Text(text = uiState.value.jpushBean?.serviceTypeName ?: "",
fontSize = 18.sp,
fontWeight = FontWeight.Bold,
color = Color.Black)
Spacer(modifier = Modifier.height(8.dp))
// 订单标签
Row(verticalAlignment = Alignment.CenterVertically,
horizontalArrangement = Arrangement.spacedBy(8.dp)) {
Box(modifier = Modifier
.background(Color(0xFF9BA1B2), RoundedCornerShape(4.dp))
.padding(horizontal = 6.dp, vertical = 2.dp)) {
Text(text = "月结".takeIf { uiState.value.jpushBean?.settleType == 1 }
?: "现金", color = Color.White, fontSize = 12.sp)
}
Text(text = uiState.value.jpushBean?.orderSource ?: "",
color = Color.Black,
fontSize = 12.sp)
Text(text = uiState.value.jpushBean?.addressProperty ?: "",
color = Color(0xFFFD8205),
fontSize = 12.sp,
fontWeight = FontWeight.Medium)
}
Spacer(modifier = Modifier.height(12.dp))
// 订单号
Row(verticalAlignment = Alignment.CenterVertically,
modifier = Modifier.clickable {
uiState.value.jpushBean?.taskCode?.copy(context)
}) {
Text(text = "单号", color = Color(0xFF999999), fontSize = 13.sp)
Spacer(modifier = Modifier.width(8.dp))
Text(text = uiState.value.jpushBean?.taskCode ?: "",
color = Color(0xFF666666),
fontSize = 14.sp)
Spacer(modifier = Modifier.width(8.dp))
AsyncImage(model = R.drawable.sv_copy,
contentDescription = "copy",
modifier = Modifier.size(16.dp))
}
Spacer(modifier = Modifier.height(16.dp))
// 地址信息
Column(verticalArrangement = Arrangement.spacedBy(16.dp)) { // 救援地
Row(verticalAlignment = Alignment.Top,
modifier = Modifier.clickable { // 点击救援地时移动地图到救援位置
uiState.value.jpushBean?.let { order ->
if (order.lat != null && order.lat != 0.0 && order.lng != null && order.lng != 0.0) {
mapView.map.animateCamera(CameraUpdateFactory.newLatLngZoom(
LatLng(order.lat !!, order.lng !!),
16f))
}
}
}) {
AsyncImage(model = R.drawable.sv_rescuing,
contentDescription = "rescue",
modifier = Modifier.size(16.dp))
Spacer(modifier = Modifier.width(8.dp))
Text(text = uiState.value.jpushBean?.address ?: "",
color = Color.Black,
fontSize = 15.sp,
fontWeight = FontWeight.Medium)
}
// 目的地
if (! uiState.value.jpushBean?.distAddress.isNullOrBlank()) {
Row(verticalAlignment = Alignment.Top,
modifier = Modifier.clickable { // 点击目的地时移动地图到目的地位置
uiState.value.jpushBean?.let { order ->
if (order.distLat != null && order.distLat != 0.0 && order.distLng != null && order.distLng != 0.0) {
mapView.map.animateCamera(CameraUpdateFactory.newLatLngZoom(
LatLng(order.distLat !!, order.distLng !!),
16f))
}
}
}) {
AsyncImage(model = R.drawable.sv_dist,
contentDescription = "destination",
modifier = Modifier.size(16.dp))
Spacer(modifier = Modifier.width(8.dp))
Text(text = uiState.value.jpushBean?.distAddress ?: "",
color = Color.Black,
fontSize = 15.sp,
fontWeight = FontWeight.Medium)
}
}
}
Spacer(modifier = Modifier.height(16.dp))
// 修改按钮状态
Row(modifier = Modifier
.fillMaxWidth()
.padding(horizontal = 16.dp, vertical = 16.dp),
horizontalArrangement = Arrangement.spacedBy(12.dp)) { // 拒单按钮
Button(onClick = { vm.dispatch(NewOrderVm.Action.RefuseOrder) },
modifier = Modifier
.weight(1f)
.height(44.dp),
colors = ButtonDefaults.buttonColors(containerColor = Color.White,
contentColor = Color(0xFF666666)),
border = BorderStroke(1.dp, Color(0xFFE5E5E5)),
shape = RoundedCornerShape(8.dp)) {
Text(text = "拒绝", fontSize = 16.sp, fontWeight = FontWeight.Medium)
}
// 接单按钮
Button(onClick = { vm.dispatch(NewOrderVm.Action.ShowTaskNotes) },
modifier = Modifier
.weight(1f)
.height(44.dp),
colors = ButtonDefaults.buttonColors(containerColor = headBgColor),
shape = RoundedCornerShape(8.dp)) {
Text(text = "接单",
color = Color.White,
fontSize = 16.sp,
fontWeight = FontWeight.Medium)
}
}
}
}
val uiBean = NewOrderItemUIBean(taskCode = uiState.value.jpushBean?.taskCode,
addressProperty = uiState.value.jpushBean?.addressProperty,
address = uiState.value.jpushBean?.address,
distAddress = uiState.value.jpushBean?.distAddress,
serviceTypeName = uiState.value.jpushBean?.serviceTypeName,
orderSource = uiState.value.jpushBean?.orderSource,
settleType = uiState.value.jpushBean?.settleType,
bottomTextString = "接单",
uiType = NewOrderUiType.ACCEPT)
NewOrderItem(uiBean, goAccept = {
vm.dispatch(NewOrderVm.Action.ShowTaskNotes)
})
},
sheetPeekHeight = 180.dp,
sheetShape = RoundedCornerShape(topStart = 16.dp, topEnd = 16.dp),

View File

@ -0,0 +1,430 @@
package com.za.ui.new_order
import androidx.compose.foundation.BorderStroke
import androidx.compose.foundation.background
import androidx.compose.foundation.border
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxHeight
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.width
import androidx.compose.foundation.layout.wrapContentSize
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.KeyboardArrowRight
import androidx.compose.material3.Card
import androidx.compose.material3.CardDefaults
import androidx.compose.material3.HorizontalDivider
import androidx.compose.material3.Icon
import androidx.compose.material3.Text
import androidx.compose.material3.VerticalDivider
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.alpha
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.vector.ImageVector
import androidx.compose.ui.layout.ContentScale
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.vectorResource
import androidx.compose.ui.text.TextStyle
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import coil.compose.AsyncImage
import com.za.base.theme.bgColor
import com.za.base.theme.black50
import com.za.base.theme.black90
import com.za.base.view.CommonButton
import com.za.ext.copy
import com.za.servicing.R
object NewOrderUiType {
const val SERVICING = 1
const val HISTORY = 2
const val ACCEPT = 3
const val PENDING = 4
const val IN_SERVICING_HOME = 5
}
data class NewOrderItemUIBean(
val taskCode : String? = null,
val addressProperty : String? = null,
val address : String? = null,
val distAddress : String? = null,
val serviceTypeName : String? = null,
val orderSource : String? = null,
val settleType : Int? = null,
val currentOrderState : String? = null,
val supplierAuditStr : String? = null, //审核状态描述
val reserveTime : String? = null, //预约时间
val expectArriveTime : String? = null, //预计到达时间
val auditFailReason : String? = null, //审核失败原因
val bottomTextString : String? = null, //底部文字
val hasReplaceBatteryCapable : Int? = null, //是否具有更换电瓶的能力
val uiType : Int? = 1, //1 服务中 2 历史订单 3 接单页 4 待服务页 5 进行中首页
)
// 1 服务中 2 历史订单
@Composable
fun NewOrderItem(uiBean : NewOrderItemUIBean?,
goInServicing : () -> Unit = {},
goHistory : () -> Unit = {},
goDetail : () -> Unit = {},
goNextPage : () -> Unit = {},
goAccept : () -> Unit = {},
goOrderPhoto : () -> Unit = {},
goEle : () -> Unit = {},
goChange : () -> Unit = {}) {
val context = LocalContext.current
val horizontalPadding = 26.dp
Card(modifier = Modifier
.fillMaxWidth()
.clickable {
if (uiBean?.uiType == NewOrderUiType.HISTORY) {
goHistory()
return@clickable
}
if (uiBean?.uiType == NewOrderUiType.IN_SERVICING_HOME || uiBean?.uiType == NewOrderUiType.PENDING) {
goDetail()
return@clickable
}
}
.background(color = bgColor),
colors = CardDefaults.cardColors().copy(containerColor = Color.White),
shape = RoundedCornerShape(8.dp),
border = BorderStroke(width = 0.6.dp, color = Color(0xFFE6E6E6))) {
NewOrderItemHead(uiBean = uiBean, goInServicing = goInServicing, goChange = goChange)
if (uiBean?.uiType == NewOrderUiType.HISTORY) {
Spacer(modifier = Modifier.height(15.dp))
Row(modifier = Modifier
.fillMaxWidth()
.height(20.dp)
.padding(horizontal = horizontalPadding),
verticalAlignment = Alignment.CenterVertically,
horizontalArrangement = Arrangement.Absolute.SpaceBetween) {
Text(text = uiBean?.serviceTypeName ?: "",
color = black90,
fontWeight = FontWeight.SemiBold,
fontSize = 17.sp)
Text(uiBean?.currentOrderState ?: "",
color = Color(0xFFF19028),
fontWeight = FontWeight.Medium,
fontSize = 13.sp)
}
} else {
Spacer(modifier = Modifier.height(15.dp))
Row(modifier = Modifier
.fillMaxWidth()
.height(20.dp)
.clickable { uiBean?.taskCode.copy(context = context) }
.padding(horizontal = horizontalPadding),
verticalAlignment = Alignment.CenterVertically) {
Text("单号", color = black50, fontWeight = FontWeight.Medium, fontSize = 13.sp)
Spacer(modifier = Modifier.width(10.dp))
Text(uiBean?.taskCode ?: "",
color = black90,
fontWeight = FontWeight.SemiBold,
fontSize = 16.sp,
modifier = Modifier.wrapContentSize(align = Alignment.Center))
Spacer(modifier = Modifier.width(10.dp))
Icon(imageVector = ImageVector.vectorResource(R.drawable.sv_new_copy),
contentDescription = null,
modifier = Modifier.size(13.dp))
}
}
Spacer(modifier = Modifier.height(10.dp))
Row(modifier = Modifier
.fillMaxWidth()
.padding(horizontal = horizontalPadding),
verticalAlignment = Alignment.CenterVertically) {
AsyncImage(model = R.drawable.sv_settle_month.takeIf { uiBean?.settleType == 1 }
?: R.drawable.sv_settle_cash,
contentDescription = null,
modifier = Modifier.size(31.dp, 16.dp))
Spacer(modifier = Modifier.width(10.dp))
Text(uiBean?.orderSource ?: "",
color = Color.Black,
fontWeight = FontWeight.Medium,
fontSize = 12.sp)
Spacer(Modifier.weight(1f))
Text(uiBean?.addressProperty ?: "",
color = Color.Black,
fontWeight = FontWeight.SemiBold,
fontSize = 14.sp,
modifier = Modifier.wrapContentSize(align = Alignment.Center))
}
if (! uiBean?.reserveTime.isNullOrBlank()) {
Spacer(modifier = Modifier.height(4.dp))
Row(modifier = Modifier
.fillMaxWidth()
.height(20.dp)
.padding(horizontal = horizontalPadding),
verticalAlignment = Alignment.CenterVertically) {
AsyncImage(model = R.drawable.sv_order_reserve,
contentDescription = null,
modifier = Modifier.size(31.dp, 16.dp))
Spacer(modifier = Modifier.width(10.dp))
Text(uiBean?.reserveTime ?: "",
color = Color(0xFF354E9E),
fontWeight = FontWeight.Medium,
fontSize = 12.sp)
}
}
Spacer(modifier = Modifier.height(10.dp))
if (uiBean?.distAddress.isNullOrBlank()) {
Row(modifier = Modifier
.fillMaxWidth()
.padding(horizontal = 18.dp)
.background(color = Color(0x80F8FBFF), shape = RoundedCornerShape(4.dp))
.border(width = 0.3.dp, color = Color(0xFFD8E4F0), shape = RoundedCornerShape(4.dp))
.padding(horizontal = 12.dp, vertical = 10.dp),
verticalAlignment = Alignment.CenterVertically) {
AsyncImage(model = R.drawable.sv_rescuing,
contentDescription = null,
modifier = Modifier.size(16.dp))
Spacer(modifier = Modifier.width(10.dp))
Text(uiBean?.address ?: "",
maxLines = 2,
overflow = TextOverflow.Ellipsis,
fontSize = 12.5.sp,
fontWeight = FontWeight.Medium,
color = black90)
}
} else {
Row(modifier = Modifier
.fillMaxWidth()
.height(140.dp)
.padding(horizontal = 18.dp)
.background(color = Color(0x80F8FBFF), shape = RoundedCornerShape(4.dp))
.border(width = 0.3.dp, color = Color(0xFFD8E4F0), shape = RoundedCornerShape(4.dp))
.padding(horizontal = 12.dp, vertical = 5.dp)) {
Column(horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.SpaceAround) {
Spacer(modifier = Modifier.height(10.dp))
AsyncImage(model = R.drawable.sv_rescuing,
contentDescription = null,
modifier = Modifier.size(16.dp))
if (! uiBean?.distAddress.isNullOrBlank()) {
VerticalDivider(modifier = Modifier.weight(1f), color = Color(0xFFC1C1C1))
AsyncImage(model = R.drawable.sv_dist,
contentDescription = null,
modifier = Modifier.size(16.dp))
Spacer(modifier = Modifier.height(10.dp))
}
}
Spacer(modifier = Modifier.width(18.dp))
Column(verticalArrangement = Arrangement.SpaceAround,
modifier = Modifier.fillMaxHeight()) {
Text(uiBean?.address ?: "",
maxLines = 2,
overflow = TextOverflow.Ellipsis,
fontSize = 12.5.sp,
fontWeight = FontWeight.Medium,
color = black90)
if (uiBean?.distAddress.isNullOrBlank() == false) {
HorizontalDivider(modifier = Modifier
.alpha(0.1f)
.padding(vertical = 5.dp))
Text(uiBean?.distAddress ?: "",
maxLines = 2,
overflow = TextOverflow.Ellipsis,
fontSize = 12.5.sp,
fontWeight = FontWeight.Medium,
color = black90)
}
}
}
}
if (! uiBean?.auditFailReason.isNullOrBlank()) {
Row(modifier = Modifier
.fillMaxWidth()
.padding(horizontal = 18.dp)
.background(color = Color(0xFFFFF7EE), shape = RoundedCornerShape(4.dp))
.padding(horizontal = 15.dp, vertical = 10.dp),
verticalAlignment = Alignment.CenterVertically) {
Icon(imageVector = ImageVector.vectorResource(R.drawable.sv_warn_yellow),
contentDescription = "",
tint = Color(0xFFFF8F37))
Spacer(modifier = Modifier.width(7.dp))
Text(uiBean?.auditFailReason ?: "",
color = Color(0xFFFF8F37),
fontWeight = FontWeight.Medium,
fontSize = 12.sp)
}
}
if (uiBean?.uiType == NewOrderUiType.HISTORY) {
Spacer(modifier = Modifier.height(10.dp))
Row(modifier = Modifier
.fillMaxWidth()
.padding(horizontal = 20.dp),
horizontalArrangement = Arrangement.SpaceAround) {
AsyncImage(model = R.drawable.sv_order_photo,
contentDescription = null,
modifier = Modifier
.size(93.dp, 25.dp)
.clickable { goOrderPhoto() },
contentScale = ContentScale.None)
AsyncImage(model = R.drawable.sv_order_ele,
contentDescription = null,
modifier = Modifier
.size(93.dp, 25.dp)
.clickable { goEle() },
contentScale = ContentScale.None)
if (uiBean.hasReplaceBatteryCapable == 1) {
AsyncImage(model = R.drawable.sv_order_change,
contentDescription = null,
modifier = Modifier
.size(93.dp, 25.dp)
.clickable {
goChange()
},
contentScale = ContentScale.None)
}
}
}
if (uiBean?.uiType == NewOrderUiType.SERVICING || uiBean?.uiType == NewOrderUiType.ACCEPT) {
Spacer(modifier = Modifier.height(10.dp))
CommonButton(text = uiBean?.bottomTextString ?: "") {
if (uiBean?.uiType == NewOrderUiType.ACCEPT) {
goAccept()
return@CommonButton
}
goNextPage()
}
}
Spacer(modifier = Modifier.height(20.dp))
}
}
@Composable
fun NewOrderItemHead(uiBean : NewOrderItemUIBean?,
goInServicing : () -> Unit = {},
goChange : () -> Unit = {}) {
when (uiBean?.uiType) {
NewOrderUiType.IN_SERVICING_HOME, NewOrderUiType.PENDING, NewOrderUiType.SERVICING -> {
Row(modifier = Modifier
.fillMaxWidth()
.clickable {
if (uiBean?.uiType == NewOrderUiType.IN_SERVICING_HOME) {
goInServicing()
return@clickable
}
if (uiBean?.uiType == NewOrderUiType.PENDING) {
goChange()
return@clickable
}
}
.padding(horizontal = 5.dp, vertical = 3.dp)
.background(color = Color(0xFFF9FDFF),
shape = RoundedCornerShape(topStart = 5.dp,
topEnd = 5.dp,
bottomStart = 0.dp,
bottomEnd = 0.dp))
.padding(top = 14.dp, bottom = 8.dp, start = 21.dp, end = 16.dp),
verticalAlignment = Alignment.CenterVertically) {
Text(uiBean.serviceTypeName ?: "",
color = black90,
fontWeight = FontWeight.Medium,
fontSize = 17.sp)
Spacer(Modifier.weight(1f))
if (uiBean?.uiType == NewOrderUiType.SERVICING) {
Text("预计到达:",
color = Color(0xFFF19028),
fontWeight = FontWeight.Medium,
fontSize = 13.sp)
Spacer(modifier = Modifier.width(8.dp))
Text("${
uiBean.expectArriveTime?.split(" ")?.get(1)
}", color = Color(0xFFF19028), fontWeight = FontWeight.Medium, fontSize = 13.sp)
} else {
Text(uiBean?.currentOrderState ?: "",
color = Color(0xFFF19028),
fontWeight = FontWeight.Medium,
fontSize = 13.sp)
Spacer(modifier = Modifier.width(8.dp))
Icon(Icons.Default.KeyboardArrowRight,
contentDescription = null,
modifier = Modifier.size(13.dp),
tint = Color.Gray)
}
}
}
NewOrderUiType.HISTORY -> {
Row(modifier = Modifier
.fillMaxWidth()
.padding(horizontal = 5.dp, vertical = 3.dp)
.background(color = Color(0xFFF9FDFF),
shape = RoundedCornerShape(topStart = 5.dp,
topEnd = 5.dp,
bottomStart = 0.dp,
bottomEnd = 0.dp))
.padding(top = 14.dp, bottom = 8.dp, start = 21.dp, end = 16.dp),
verticalAlignment = Alignment.CenterVertically) {
Text(uiBean?.taskCode ?: "",
color = black90,
fontWeight = FontWeight.Medium,
fontSize = 17.sp)
Spacer(modifier = Modifier.width(9.dp))
Icon(imageVector = ImageVector.vectorResource(R.drawable.sv_new_copy),
contentDescription = null,
modifier = Modifier.size(13.dp))
Spacer(Modifier.weight(1f))
Box(modifier = Modifier
.background(color = Color(0x99FFEBEB), shape = RoundedCornerShape(4.dp))
.border(width = 0.5.dp,
color = Color(0xFFFFC7B8),
shape = RoundedCornerShape(4.dp))
.padding(horizontal = 4.dp, vertical = 2.dp)) {
Text(uiBean?.supplierAuditStr ?: "",
color = Color(0xFFFF5656),
fontWeight = FontWeight.Normal,
fontSize = 10.sp,
style = TextStyle.Default.copy())
}
Spacer(modifier = Modifier.width(8.dp))
Icon(Icons.Default.KeyboardArrowRight,
contentDescription = null,
modifier = Modifier.size(13.dp),
tint = Color.Gray)
}
}
}
HorizontalDivider(modifier = Modifier.alpha(0.1f))
}

View File

@ -3,50 +3,28 @@ package com.za.ui.servicing.go_accident
import android.os.Bundle
import android.os.Handler
import android.os.Looper
import androidx.compose.foundation.background
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
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.height
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.width
import androidx.compose.foundation.layout.wrapContentHeight
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.foundation.verticalScroll
import androidx.compose.material3.BottomSheetScaffold
import androidx.compose.material3.Button
import androidx.compose.material3.ButtonDefaults
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.HorizontalDivider
import androidx.compose.material3.SheetValue
import androidx.compose.material3.Text
import androidx.compose.material3.rememberBottomSheetScaffoldState
import androidx.compose.material3.rememberStandardBottomSheetState
import androidx.compose.runtime.Composable
import androidx.compose.runtime.DisposableEffect
import androidx.compose.runtime.remember
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.alpha
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import androidx.compose.ui.viewinterop.AndroidView
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.LifecycleEventObserver
import androidx.lifecycle.compose.LocalLifecycleOwner
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import androidx.lifecycle.viewmodel.compose.viewModel
import coil.compose.AsyncImage
import com.amap.api.location.AMapLocationClient
import com.amap.api.maps.CameraUpdateFactory
import com.amap.api.maps.MapView
@ -56,14 +34,16 @@ import com.amap.api.maps.model.LatLngBounds
import com.amap.api.maps.model.MarkerOptions
import com.amap.api.maps.model.PolylineOptions
import com.za.base.BaseActivity
import com.za.base.theme.headBgColor
import com.za.base.view.CommonDialog
import com.za.common.GlobalData
import com.za.common.util.ImageUtil
import com.za.ext.copy
import com.za.ext.convertToFlowName
import com.za.ext.finish
import com.za.ext.goNextPage
import com.za.servicing.R
import com.za.ui.new_order.NewOrderItem
import com.za.ui.new_order.NewOrderItemUIBean
import com.za.ui.new_order.NewOrderUiType
import com.za.ui.servicing.view.InServicingHeadView
import com.za.ui.servicing.view.ServiceOperation
@ -137,163 +117,20 @@ fun GoAccidentSiteScreen(vm : GoAccidentSiteVm = viewModel()) {
orderInfo = uiState.value.orderInfo)
},
sheetContent = {
Column(modifier = Modifier
.fillMaxWidth()
.wrapContentHeight()
.verticalScroll(rememberScrollState())) {
Box(modifier = Modifier
.fillMaxWidth()
.padding(vertical = 8.dp),
contentAlignment = Alignment.Center) {
Box(modifier = Modifier
.width(32.dp)
.height(4.dp)
.background(color = Color(0xFFE0E0E0), shape = RoundedCornerShape(2.dp)))
}
Row(modifier = Modifier
.fillMaxWidth()
.padding(horizontal = 16.dp, vertical = 12.dp),
horizontalArrangement = Arrangement.SpaceBetween,
verticalAlignment = Alignment.CenterVertically) {
Text(text = if (! uiState.value.estimatedArrivalTime.isNullOrBlank()) "预计到达: ${uiState.value.estimatedArrivalTime}"
else "计算中...", color = Color(0xFF666666), fontSize = 14.sp)
Text(text = if (uiState.value.remainingDistance > 0) "距离救援地: %.1fkm".format(
uiState.value.remainingDistance / 1000f)
else "计算中...", color = Color(0xFFFF4D4F), fontSize = 14.sp)
}
HorizontalDivider(modifier = Modifier
.fillMaxWidth()
.alpha(0.1f))
Column(modifier = Modifier
.fillMaxWidth()
.padding(horizontal = 16.dp, vertical = 12.dp)) {
Text(text = uiState.value.orderInfo?.serviceTypeName ?: "",
fontSize = 18.sp,
fontWeight = FontWeight.Bold,
color = Color.Black)
Spacer(modifier = Modifier.height(8.dp))
// 订单标签
Row(verticalAlignment = Alignment.CenterVertically,
horizontalArrangement = Arrangement.spacedBy(8.dp)) {
Box(modifier = Modifier
.background(Color(0xFF9BA1B2), RoundedCornerShape(4.dp))
.padding(horizontal = 6.dp, vertical = 2.dp)) {
Text(text = "月结".takeIf { uiState.value.orderInfo?.settleType == 1 }
?: "现金", color = Color.White, fontSize = 12.sp)
}
Text(text = uiState.value.orderInfo?.orderSource ?: "",
color = Color.Black,
fontSize = 12.sp)
Text(text = uiState.value.orderInfo?.addressProperty ?: "",
color = Color(0xFFFD8205),
fontSize = 12.sp,
fontWeight = FontWeight.Medium)
}
Spacer(modifier = Modifier.height(12.dp))
Row(verticalAlignment = Alignment.CenterVertically,
modifier = Modifier.clickable {
uiState.value.orderInfo?.taskCode?.copy(context)
}) {
Text(text = "单号", color = Color(0xFF999999), fontSize = 13.sp)
Spacer(modifier = Modifier.width(8.dp))
Text(text = uiState.value.orderInfo?.taskCode ?: "",
color = Color(0xFF666666),
fontSize = 14.sp)
Spacer(modifier = Modifier.width(8.dp))
AsyncImage(model = R.drawable.sv_copy,
contentDescription = "copy",
modifier = Modifier.size(16.dp))
}
Spacer(modifier = Modifier.height(12.dp))
Column(verticalArrangement = Arrangement.spacedBy(12.dp)) {
Row(verticalAlignment = Alignment.Top,
modifier = Modifier
.fillMaxWidth()
.clickable {
uiState.value.orderInfo?.let { order ->
if (order.lat != null && order.lat != 0.0 && order.lng != null && order.lng != 0.0) {
mapView.map.animateCamera(CameraUpdateFactory.newLatLngZoom(
LatLng(order.lat !!, order.lng !!),
16f))
}
}
}) {
AsyncImage(model = R.drawable.sv_rescuing,
contentDescription = "rescue",
modifier = Modifier.size(16.dp))
Spacer(modifier = Modifier.width(8.dp))
Text(text = uiState.value.orderInfo?.address ?: "",
color = Color.Black,
fontSize = 15.sp,
fontWeight = FontWeight.Medium,
modifier = Modifier.weight(1f))
}
if (! uiState.value.orderInfo?.distAddress.isNullOrBlank()) {
Row(verticalAlignment = Alignment.Top,
modifier = Modifier
.fillMaxWidth()
.clickable {
uiState.value.orderInfo?.let { order ->
if (order.distLat != null && order.distLat != 0.0 && order.distLng != null && order.distLng != 0.0) {
mapView.map.animateCamera(CameraUpdateFactory.newLatLngZoom(
LatLng(order.distLat !!, order.distLng !!),
16f))
}
}
}) {
AsyncImage(model = R.drawable.sv_dist,
contentDescription = "destination",
modifier = Modifier.size(16.dp))
Spacer(modifier = Modifier.width(8.dp))
Text(text = uiState.value.orderInfo?.distAddress ?: "",
color = Color.Black,
fontSize = 15.sp,
fontWeight = FontWeight.Medium,
modifier = Modifier.weight(1f))
}
}
}
}
Button(onClick = {
vm.dispatch(GoAccidentSiteVm.Action.UpdateState(uiState.value.copy(
isGoNextPageDialog = true)))
},
modifier = Modifier
.fillMaxWidth()
.height(44.dp)
.padding(horizontal = 16.dp),
colors = ButtonDefaults.buttonColors(containerColor = headBgColor),
shape = RoundedCornerShape(8.dp)) {
Text(text = "到达事发地",
color = Color.White,
fontSize = 16.sp,
fontWeight = FontWeight.Medium)
}
Spacer(modifier = Modifier.height(16.dp))
}
val uiBean = NewOrderItemUIBean(taskCode = uiState.value.orderInfo?.taskCode,
addressProperty = uiState.value.orderInfo?.addressProperty,
address = uiState.value.orderInfo?.address,
distAddress = uiState.value.orderInfo?.distAddress,
serviceTypeName = uiState.value.orderInfo?.serviceTypeName,
orderSource = uiState.value.orderInfo?.orderSource,
settleType = uiState.value.orderInfo?.settleType,
bottomTextString = "到达事发地",
expectArriveTime = uiState.value.orderInfo?.expectArriveTime,
uiType = NewOrderUiType.SERVICING)
NewOrderItem(uiBean, goNextPage = {
vm.dispatch(GoAccidentSiteVm.Action.UpdateState(uiState.value.copy(
isGoNextPageDialog = true)))
})
},
sheetPeekHeight = 180.dp,
sheetShape = RoundedCornerShape(topStart = 12.dp, topEnd = 12.dp),

View File

@ -1,6 +1,5 @@
package com.za.ui.servicing.go_accident
import androidx.lifecycle.viewModelScope
import com.amap.api.maps.AMapUtils
import com.amap.api.maps.model.BitmapDescriptorFactory
import com.amap.api.maps.model.LatLng
@ -29,11 +28,7 @@ import com.za.offline.OfflineUpdateTaskBean
import com.za.service.location.ZdLocationManager
import com.za.servicing.R
import kotlinx.coroutines.Job
import kotlinx.coroutines.delay
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.update
import kotlinx.coroutines.isActive
import kotlinx.coroutines.launch
import java.text.SimpleDateFormat
import java.util.Calendar
import java.util.Date

View File

@ -67,6 +67,10 @@ import com.za.ext.copy
import com.za.ext.finish
import com.za.ext.goNextPage
import com.za.servicing.R
import com.za.ui.new_order.NewOrderItem
import com.za.ui.new_order.NewOrderItemUIBean
import com.za.ui.new_order.NewOrderUiType
import com.za.ui.new_order.NewOrderVm
import com.za.ui.servicing.view.InServicingHeadView
import com.za.ui.servicing.view.ServiceOperation
@ -179,168 +183,21 @@ fun GoToDestinationScreen(vm : GoToDestinationVm = viewModel()) {
orderInfo = orderInfo)
},
sheetContent = {
Column(modifier = Modifier
.fillMaxWidth()
.wrapContentHeight()
.verticalScroll(rememberScrollState())) { // 滑动指示器
Box(modifier = Modifier
.fillMaxWidth()
.padding(vertical = 8.dp),
contentAlignment = Alignment.Center) {
Box(modifier = Modifier
.width(32.dp)
.height(4.dp)
.background(color = Color(0xFFE0E0E0), shape = RoundedCornerShape(2.dp)))
}
val uiBean = NewOrderItemUIBean(taskCode = uiState.value.orderInfo?.taskCode,
addressProperty = uiState.value.orderInfo?.addressProperty,
address = uiState.value.orderInfo?.address,
distAddress = uiState.value.orderInfo?.distAddress,
serviceTypeName = uiState.value.orderInfo?.serviceTypeName,
orderSource = uiState.value.orderInfo?.orderSource,
settleType = uiState.value.orderInfo?.settleType,
expectArriveTime = uiState.value.orderInfo?.expectArriveTime,
bottomTextString = "到达目的地",
uiType = NewOrderUiType.SERVICING)
NewOrderItem(uiBean, goNextPage = {
vm.dispatch(GoToDestinationVm.Action.UpdateState(uiState.value.copy(
isGoNextPageDialog = true)))
})
// 距离和时间信息
Row(modifier = Modifier
.fillMaxWidth()
.padding(horizontal = 16.dp, vertical = 12.dp),
horizontalArrangement = Arrangement.SpaceBetween,
verticalAlignment = Alignment.CenterVertically) {
Text(text = if (estimatedTime.isNotEmpty()) "预计到达: $estimatedTime"
else "计算中...", color = Color(0xFF666666), fontSize = 14.sp)
Text(text = if (remainingDistance > 0) "目的地距离: %.1fkm".format(
remainingDistance / 1000f)
else "计算中...", color = Color(0xFFFF4D4F), fontSize = 14.sp)
}
// 使用 HorizontalDivider 替代 Box
HorizontalDivider(modifier = Modifier
.fillMaxWidth()
.alpha(0.1f))
// 订单信息
Column(modifier = Modifier
.fillMaxWidth()
.padding(horizontal = 16.dp, vertical = 12.dp)) {
Text(text = uiState.value.orderInfo?.serviceTypeName ?: "",
fontSize = 18.sp,
fontWeight = FontWeight.Bold,
color = Color.Black)
Spacer(modifier = Modifier.height(8.dp))
// 订单标签
Row(verticalAlignment = Alignment.CenterVertically,
horizontalArrangement = Arrangement.spacedBy(8.dp)) {
Box(modifier = Modifier
.background(Color(0xFF9BA1B2), RoundedCornerShape(4.dp))
.padding(horizontal = 6.dp, vertical = 2.dp)) {
Text(text = "月结".takeIf { uiState.value.orderInfo?.settleType == 1 }
?: "现金", color = Color.White, fontSize = 12.sp)
}
Text(text = uiState.value.orderInfo?.orderSource ?: "",
color = Color.Black,
fontSize = 12.sp)
Text(text = uiState.value.orderInfo?.addressProperty ?: "",
color = Color(0xFFFD8205),
fontSize = 12.sp,
fontWeight = FontWeight.Medium)
}
Spacer(modifier = Modifier.height(12.dp))
// 订单号
Row(verticalAlignment = Alignment.CenterVertically,
modifier = Modifier.clickable {
uiState.value.orderInfo?.taskCode?.copy(context)
}) {
Text(text = "单号", color = Color(0xFF999999), fontSize = 13.sp)
Spacer(modifier = Modifier.width(8.dp))
Text(text = uiState.value.orderInfo?.taskCode ?: "",
color = Color(0xFF666666),
fontSize = 14.sp)
Spacer(modifier = Modifier.width(8.dp))
AsyncImage(model = R.drawable.sv_copy,
contentDescription = "copy",
modifier = Modifier.size(16.dp))
}
Spacer(modifier = Modifier.height(12.dp))
// 地址信息
Column(verticalArrangement = Arrangement.spacedBy(12.dp)) { // 救援地
Row(verticalAlignment = Alignment.Top,
modifier = Modifier
.fillMaxWidth()
.clickable {
uiState.value.orderInfo?.let { order ->
if (order.lat != null && order.lat != 0.0 && order.lng != null && order.lng != 0.0) {
mapView.map.animateCamera(CameraUpdateFactory.newLatLngZoom(
LatLng(order.lat !!, order.lng !!),
16f))
}
}
}) {
AsyncImage(model = R.drawable.sv_rescuing,
contentDescription = "rescue",
modifier = Modifier.size(16.dp))
Spacer(modifier = Modifier.width(8.dp))
Text(text = uiState.value.orderInfo?.address ?: "",
color = Color.Black,
fontSize = 15.sp,
fontWeight = FontWeight.Medium,
modifier = Modifier.weight(1f))
}
// 目的地
if (! uiState.value.orderInfo?.distAddress.isNullOrBlank()) {
Row(verticalAlignment = Alignment.Top,
modifier = Modifier
.fillMaxWidth()
.clickable {
uiState.value.orderInfo?.let { order ->
if (order.distLat != null && order.distLat != 0.0 && order.distLng != null && order.distLng != 0.0) {
mapView.map.animateCamera(CameraUpdateFactory.newLatLngZoom(
LatLng(order.distLat !!, order.distLng !!),
16f))
}
}
}) {
AsyncImage(model = R.drawable.sv_dist,
contentDescription = "destination",
modifier = Modifier.size(16.dp))
Spacer(modifier = Modifier.width(8.dp))
Text(text = uiState.value.orderInfo?.distAddress ?: "",
color = Color.Black,
fontSize = 15.sp,
fontWeight = FontWeight.Medium,
modifier = Modifier.weight(1f))
}
}
}
}
// 到达按钮 - 移除外层 Column简化布局
Button(onClick = {
vm.dispatch(GoToDestinationVm.Action.UpdateState(uiState.value.copy(
isGoNextPageDialog = true)))
},
modifier = Modifier
.fillMaxWidth()
.height(44.dp)
.padding(horizontal = 16.dp),
colors = ButtonDefaults.buttonColors(containerColor = headBgColor),
shape = RoundedCornerShape(8.dp)) {
Text(text = "到达目的地",
color = Color.White,
fontSize = 16.sp,
fontWeight = FontWeight.Medium)
}
Spacer(modifier = Modifier.height(16.dp))
}
},
sheetPeekHeight = 180.dp,
sheetShape = RoundedCornerShape(topStart = 12.dp, topEnd = 12.dp),

View File

@ -68,6 +68,10 @@ import com.za.ext.finish
import com.za.ext.goNextPage
import com.za.ext.navigationActivity
import com.za.servicing.R
import com.za.ui.new_order.NewOrderItem
import com.za.ui.new_order.NewOrderItemUIBean
import com.za.ui.new_order.NewOrderUiType
import com.za.ui.servicing.go_to_destination.GoToDestinationVm
import com.za.ui.servicing.inservice_people_confirm.ServicePeopleConfirmActivity
import com.za.ui.servicing.view.InServicingHeadView
import com.za.ui.servicing.view.ServiceOperation
@ -163,170 +167,25 @@ fun WaitToStartScreen(vm : WaitToStartVm = viewModel()) {
orderInfo = uiState.value.orderInfo)
},
sheetContent = {
Column(modifier = Modifier
.fillMaxWidth()
.wrapContentHeight()
.verticalScroll(rememberScrollState())) { // 滑动指示器
Box(modifier = Modifier
.fillMaxWidth()
.padding(vertical = 8.dp),
contentAlignment = Alignment.Center) {
Box(modifier = Modifier
.width(32.dp)
.height(4.dp)
.background(color = Color(0xFFE0E0E0), shape = RoundedCornerShape(2.dp)))
val uiBean = NewOrderItemUIBean(taskCode = uiState.value.orderInfo?.taskCode,
addressProperty = uiState.value.orderInfo?.addressProperty,
address = uiState.value.orderInfo?.address,
distAddress = uiState.value.orderInfo?.distAddress,
serviceTypeName = uiState.value.orderInfo?.serviceTypeName,
orderSource = uiState.value.orderInfo?.orderSource,
settleType = uiState.value.orderInfo?.settleType,
expectArriveTime = uiState.value.orderInfo?.expectArriveTime,
bottomTextString = "发车",
uiType = NewOrderUiType.SERVICING)
NewOrderItem(uiBean, goNextPage = {
if (! GlobalData.isMaster && GlobalData.driverInfoBean != null && GlobalData.driverInfoBean?.authStatus == 1) {
vm.dispatch(WaitToStartVm.Action.UpdateState(uiState.value.copy(
showServicePeopleConfirmDialog = true)))
return@NewOrderItem
}
// 距离和时间信息
Row(modifier = Modifier
.fillMaxWidth()
.padding(horizontal = 16.dp, vertical = 12.dp),
horizontalArrangement = Arrangement.SpaceBetween,
verticalAlignment = Alignment.CenterVertically) {
Text(text = if (uiState.value.estimatedArrivalTime.isNotEmpty()) "预计到达: ${uiState.value.estimatedArrivalTime}"
else "计算中...", color = Color(0xFF666666), fontSize = 14.sp)
Text(text = if (uiState.value.remainingDistance > 0) "距离救援地: %.1fkm".format(
uiState.value.remainingDistance / 1000f)
else "计算中...", color = Color(0xFFFF4D4F), fontSize = 14.sp)
}
HorizontalDivider(modifier = Modifier
.fillMaxWidth()
.alpha(0.1f))
// 订单信息
Column(modifier = Modifier
.fillMaxWidth()
.padding(horizontal = 16.dp, vertical = 12.dp)) { // 订单类型
Text(text = uiState.value.orderInfo?.serviceTypeName ?: "",
fontSize = 18.sp,
fontWeight = FontWeight.Bold,
color = Color.Black)
Spacer(modifier = Modifier.height(8.dp))
// 订单标签
Row(verticalAlignment = Alignment.CenterVertically,
horizontalArrangement = Arrangement.spacedBy(8.dp)) {
Box(modifier = Modifier
.background(Color(0xFF9BA1B2), RoundedCornerShape(4.dp))
.padding(horizontal = 6.dp, vertical = 2.dp)) {
Text(text = "月结".takeIf { uiState.value.orderInfo?.settleType == 1 }
?: "现金", color = Color.White, fontSize = 12.sp)
}
Text(text = uiState.value.orderInfo?.orderSource ?: "",
color = Color.Black,
fontSize = 12.sp)
Text(text = uiState.value.orderInfo?.addressProperty ?: "",
color = Color(0xFFFD8205),
fontSize = 12.sp,
fontWeight = FontWeight.Medium)
}
Spacer(modifier = Modifier.height(12.dp))
// 订单号
Row(verticalAlignment = Alignment.CenterVertically,
modifier = Modifier.clickable {
uiState.value.orderInfo?.taskCode?.copy(context)
}) {
Text(text = "单号", color = Color(0xFF999999), fontSize = 13.sp)
Spacer(modifier = Modifier.width(8.dp))
Text(text = uiState.value.orderInfo?.taskCode ?: "",
color = Color(0xFF666666),
fontSize = 14.sp)
Spacer(modifier = Modifier.width(8.dp))
AsyncImage(model = R.drawable.sv_copy,
contentDescription = "copy",
modifier = Modifier.size(16.dp))
}
Spacer(modifier = Modifier.height(16.dp))
// 地址信息
Column(verticalArrangement = Arrangement.spacedBy(16.dp)) { // 救援地
Row(verticalAlignment = Alignment.Top,
modifier = Modifier.clickable { // 点击救援地时移动地图到救援位置
uiState.value.orderInfo?.let { order ->
if (order.lat != null && order.lat != 0.0 && order.lng != null && order.lng != 0.0) {
mapView.map.animateCamera(CameraUpdateFactory.newLatLngZoom(
LatLng(order.lat !!, order.lng !!),
16f))
}
}
}) {
AsyncImage(model = R.drawable.sv_rescuing,
contentDescription = "rescue",
modifier = Modifier.size(16.dp))
Spacer(modifier = Modifier.width(8.dp))
Text(text = uiState.value.orderInfo?.address ?: "",
color = Color.Black,
fontSize = 15.sp,
fontWeight = FontWeight.Medium)
}
// 目的地
if (! uiState.value.orderInfo?.distAddress.isNullOrBlank()) {
Row(verticalAlignment = Alignment.Top,
modifier = Modifier.clickable { // 点击目的地时移动地图到目的地位置
uiState.value.orderInfo?.let { order ->
if (order.distLat != null && order.distLat != 0.0 && order.distLng != null && order.distLng != 0.0) {
mapView.map.animateCamera(CameraUpdateFactory.newLatLngZoom(
LatLng(order.distLat !!, order.distLng !!),
16f))
}
}
}) {
AsyncImage(model = R.drawable.sv_dist,
contentDescription = "destination",
modifier = Modifier.size(16.dp))
Spacer(modifier = Modifier.width(8.dp))
Text(text = uiState.value.orderInfo?.distAddress ?: "",
color = Color.Black,
fontSize = 15.sp,
fontWeight = FontWeight.Medium)
}
}
}
Spacer(modifier = Modifier.height(16.dp))
// 发车按钮
Button(onClick = {
if (! GlobalData.isMaster && GlobalData.driverInfoBean != null && GlobalData.driverInfoBean?.authStatus == 1) {
vm.dispatch(WaitToStartVm.Action.UpdateState(uiState.value.copy(
showServicePeopleConfirmDialog = true)))
return@Button
}
vm.dispatch(WaitToStartVm.Action.UpdateState(uiState.value.copy(
isGoNextPageDialog = true)))
},
modifier = Modifier
.fillMaxWidth()
.height(44.dp)
.padding(horizontal = 16.dp),
colors = ButtonDefaults.buttonColors(containerColor = headBgColor),
shape = RoundedCornerShape(8.dp)) {
Text(text = "发车",
color = Color.White,
fontSize = 16.sp,
fontWeight = FontWeight.Medium)
}
Spacer(modifier = Modifier.height(16.dp))
}
}
vm.dispatch(WaitToStartVm.Action.UpdateState(uiState.value.copy(isGoNextPageDialog = true)))
})
},
sheetPeekHeight = 180.dp,
sheetShape = RoundedCornerShape(topStart = 12.dp, topEnd = 12.dp),

View File

@ -0,0 +1,14 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="13dp"
android:height="13dp"
android:viewportWidth="13"
android:viewportHeight="13">
<path
android:pathData="M4.443,9.576L4.457,9.562L8.95,9.562C9.513,9.562 9.974,9.101 9.974,8.539L9.973,5.012L9.97,1.991L9.973,1.992L9.974,1.799C9.974,1.236 9.513,0.776 8.95,0.776L2.211,0.776C1.648,0.776 1.187,1.236 1.187,1.799L1.187,8.539C1.187,9.101 1.648,9.562 2.211,9.562L3.334,9.562L3.346,9.576L4.443,9.576ZM8.389,8.639L2.772,8.639C2.38,8.639 2.111,8.369 2.111,7.977L2.111,2.361C2.111,1.968 2.38,1.699 2.772,1.699L8.389,1.699C8.781,1.699 9.05,1.968 9.05,2.361L9.05,7.977C9.05,8.369 8.781,8.639 8.389,8.639ZM11.197,11.809C11.759,11.809 12.22,11.348 12.22,10.785L12.22,4.046C12.22,3.483 11.759,3.022 11.197,3.022L10.769,3.023L10.771,3.957C11.088,4.012 11.297,4.262 11.297,4.607L11.297,10.224C11.297,10.616 11.027,10.885 10.635,10.885L5.019,10.885C4.68,10.885 4.433,10.684 4.372,10.376L3.433,10.376L3.434,10.785C3.434,11.348 3.895,11.809 4.457,11.809L11.197,11.809Z"
android:strokeAlpha="0.8312872"
android:strokeWidth="1"
android:fillColor="#9197AB"
android:fillType="nonZero"
android:strokeColor="#00000000"
android:fillAlpha="0.8312872"/>
</vector>

View File

@ -0,0 +1,81 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:aapt="http://schemas.android.com/aapt"
android:width="93dp"
android:height="25dp"
android:viewportWidth="93"
android:viewportHeight="25">
<path
android:pathData="M4.15,0.15L88.85,0.15A4,4 0,0 1,92.85 4.15L92.85,20.85A4,4 0,0 1,88.85 24.85L4.15,24.85A4,4 0,0 1,0.15 20.85L0.15,4.15A4,4 0,0 1,4.15 0.15z"
android:strokeWidth="0.3"
android:fillColor="#00000000"
android:fillType="evenOdd">
<aapt:attr name="android:strokeColor">
<gradient
android:startX="92.85"
android:startY="12.5"
android:endX="0.15"
android:endY="12.5"
android:type="linear">
<item android:offset="0" android:color="#29F2E1CF"/>
<item android:offset="0.21" android:color="#FFF2E1CF"/>
<item android:offset="0.735" android:color="#FFF2E1CF"/>
<item android:offset="1" android:color="#29F2E1CF"/>
</gradient>
</aapt:attr>
</path>
<path
android:pathData="M6.699,7.388C6.239,7.388 5.866,7.76 5.866,8.22L5.866,9.971C5.866,10.43 6.239,10.803 6.699,10.803L6.817,10.803L6.817,19.278C6.817,19.742 7.213,20.12 7.701,20.12L22.431,20.12C22.918,20.12 23.315,19.743 23.315,19.278L23.315,10.803L23.433,10.803C23.893,10.803 24.266,10.43 24.266,9.971L24.266,8.22C24.266,8 24.178,7.788 24.022,7.632C23.866,7.475 23.654,7.388 23.433,7.388L6.699,7.388ZM17.571,3.667L20.984,3.667C21.413,3.667 21.628,3.882 21.628,4.311L21.628,5.66C21.628,6.089 21.413,6.303 20.984,6.303L17.571,6.303C17.142,6.303 16.927,6.089 16.927,5.66L16.927,4.311C16.927,3.882 17.142,3.667 17.571,3.667ZM9.085,3.667L12.498,3.667C12.927,3.667 13.142,3.882 13.142,4.311L13.142,5.66C13.142,6.089 12.927,6.303 12.498,6.303L9.085,6.303C8.656,6.303 8.441,6.089 8.441,5.66L8.441,4.311C8.441,3.882 8.656,3.667 9.085,3.667Z"
android:strokeWidth="1"
android:fillColor="#000000"
android:fillType="nonZero"
android:strokeColor="#00000000"/>
<path
android:pathData="M6.699,7.388C6.239,7.388 5.866,7.76 5.866,8.22L5.866,9.971C5.866,10.43 6.239,10.803 6.699,10.803L6.817,10.803L6.817,19.278C6.817,19.742 7.213,20.12 7.701,20.12L22.431,20.12C22.918,20.12 23.315,19.743 23.315,19.278L23.315,10.803L23.433,10.803C23.893,10.803 24.266,10.43 24.266,9.971L24.266,8.22C24.266,8 24.178,7.788 24.022,7.632C23.866,7.475 23.654,7.388 23.433,7.388L6.699,7.388ZM17.571,3.667L20.984,3.667C21.413,3.667 21.628,3.882 21.628,4.311L21.628,5.66C21.628,6.089 21.413,6.303 20.984,6.303L17.571,6.303C17.142,6.303 16.927,6.089 16.927,5.66L16.927,4.311C16.927,3.882 17.142,3.667 17.571,3.667ZM9.085,3.667L12.498,3.667C12.927,3.667 13.142,3.882 13.142,4.311L13.142,5.66C13.142,6.089 12.927,6.303 12.498,6.303L9.085,6.303C8.656,6.303 8.441,6.089 8.441,5.66L8.441,4.311C8.441,3.882 8.656,3.667 9.085,3.667Z"
android:strokeWidth="1"
android:fillColor="#000000"
android:fillType="nonZero"
android:strokeColor="#00000000"/>
<path
android:pathData="M6.699,7.388C6.239,7.388 5.866,7.76 5.866,8.22L5.866,9.971C5.866,10.43 6.239,10.803 6.699,10.803L6.817,10.803L6.817,19.278C6.817,19.742 7.213,20.12 7.701,20.12L22.431,20.12C22.918,20.12 23.315,19.743 23.315,19.278L23.315,10.803L23.433,10.803C23.893,10.803 24.266,10.43 24.266,9.971L24.266,8.22C24.266,8 24.178,7.788 24.022,7.632C23.866,7.475 23.654,7.388 23.433,7.388L6.699,7.388ZM17.571,3.667L20.984,3.667C21.413,3.667 21.628,3.882 21.628,4.311L21.628,5.66C21.628,6.089 21.413,6.303 20.984,6.303L17.571,6.303C17.142,6.303 16.927,6.089 16.927,5.66L16.927,4.311C16.927,3.882 17.142,3.667 17.571,3.667ZM9.085,3.667L12.498,3.667C12.927,3.667 13.142,3.882 13.142,4.311L13.142,5.66C13.142,6.089 12.927,6.303 12.498,6.303L9.085,6.303C8.656,6.303 8.441,6.089 8.441,5.66L8.441,4.311C8.441,3.882 8.656,3.667 9.085,3.667Z"
android:strokeWidth="1"
android:fillType="nonZero"
android:strokeColor="#00000000">
<aapt:attr name="android:fillColor">
<gradient
android:startX="13.486"
android:startY="3.667"
android:endX="13.486"
android:endY="18.565"
android:type="linear">
<item android:offset="0" android:color="#FFFFBA65"/>
<item android:offset="0.365" android:color="#FFFFC48B"/>
<item android:offset="1" android:color="#FFFCA56F"/>
</gradient>
</aapt:attr>
</path>
<path
android:pathData="M13.665,14.703L12.323,14.703L12.323,16.045C12.323,16.345 12.08,16.589 11.779,16.589C11.479,16.589 11.235,16.345 11.235,16.045L11.235,14.703L9.893,14.703C9.593,14.703 9.349,14.459 9.349,14.159C9.349,13.858 9.593,13.614 9.893,13.614L11.235,13.614L11.235,12.273C11.235,11.972 11.479,11.728 11.779,11.728C12.08,11.728 12.323,11.972 12.323,12.273L12.323,13.614L13.665,13.614C13.966,13.614 14.209,13.858 14.209,14.159C14.209,14.459 13.966,14.703 13.665,14.703L13.665,14.703Z"
android:strokeWidth="0.3"
android:fillColor="#FFFFFF"
android:fillType="nonZero"
android:strokeColor="#FFFFFF"/>
<path
android:pathData="M20.174,14.703L16.403,14.703C16.102,14.703 15.858,14.459 15.858,14.159C15.858,13.858 16.102,13.614 16.403,13.614L20.174,13.614C20.475,13.614 20.719,13.858 20.719,14.159C20.719,14.459 20.475,14.703 20.174,14.703L20.174,14.703Z"
android:strokeWidth="0.3"
android:fillColor="#FFFFFF"
android:fillType="nonZero"
android:strokeColor="#FFFFFF"/>
<path
android:pathData="m30.183,17.725q1.966,-0.328 3.169,-1.01 -0.918,-0.634 -1.665,-1.665l0.564,-0.43h-0.833v-4.501h3.771q0.005,-0.462 0.011,-0.988L30.569,9.131L30.569,8.379h9.861v0.752h-4.404q0,0.532 -0.005,0.988h3.561v5.027h-0.816v-0.526h-3.008q-0.279,1.273 -0.886,1.96 2.154,0.79 6,0.779 -0.269,0.473 -0.44,0.859 -4.265,-0.118 -6.268,-1.047 -1.235,0.816 -3.486,1.316 -0.215,-0.376 -0.494,-0.763zM32.234,12.01h2.933q0.011,-0.516 0.016,-1.16h-2.949zM35.156,12.73h-2.922v1.16h2.831q0.07,-0.526 0.091,-1.16zM35.881,13.89h2.884L38.766,12.73h-2.782q-0.027,0.623 -0.102,1.16zM38.766,10.85h-2.75q-0.005,0.65 -0.016,1.16h2.766zM34.071,16.221q0.58,-0.5 0.854,-1.601h-2.632q0.741,1.031 1.778,1.601zM44.19,14.417L45.125,14.417L45.125,11.511Q44.862,11.301 44.502,11.033 45.92,9.561 46.758,7.799L47.628,7.95q-0.258,0.516 -0.548,0.999h3.244L50.324,9.668q-0.408,0.51 -1.268,1.504h1.923v3.244h0.87v0.741L48.514,15.158q0.854,1.864 3.282,2.363 -0.397,0.473 -0.645,0.87 -2.213,-0.741 -3.131,-2.675 -0.596,1.665 -3.583,2.761 -0.236,-0.387 -0.602,-0.784 3.094,-0.913 3.55,-2.535h-3.196zM41.15,13.557q0.639,-0.188 1.354,-0.424L42.504,10.646L41.247,10.646L41.247,9.916h1.257L42.504,7.917h0.816v1.998h1.214v0.73h-1.214v2.202q0.537,-0.188 1.117,-0.408 0.011,0.526 0.021,0.849 -0.097,0.032 -1.139,0.419v3.459q0,1.096 -0.988,1.139 -0.473,0.021 -1.063,0.011 -0.064,-0.451 -0.14,-0.892 0.591,0.064 0.988,0.064 0.387,0 0.387,-0.451L42.504,14.003q-0.537,0.199 -1.235,0.457zM50.217,11.914h-1.805q0,1.364 -0.07,2.503h1.875zM45.888,14.417h1.676q0.097,-0.537 0.086,-2.503L45.888,11.914ZM49.336,9.69L46.613,9.69Q46.081,10.474 45.469,11.172h2.664q0.73,-0.875 1.203,-1.482zM52.698,9.271h3.964v-1.375h0.892v1.375h3.975v6.037h-3.975v1.257q0,0.655 0.688,0.655h2.514q0.73,0 0.892,-0.483 0.172,-0.526 0.247,-1.515 0.312,0.14 0.892,0.333 -0.129,0.859 -0.29,1.472 -0.269,1.01 -1.461,1.01h-2.857q-1.515,0 -1.515,-1.482v-1.246h-3.072v0.741h-0.892zM60.637,14.502v-1.837h-3.083v1.837zM53.59,14.502h3.072v-1.837h-3.072zM60.637,10.077h-3.083v1.826h3.083zM53.59,11.903h3.072L56.662,10.077h-3.072zM63.193,12.977h1.246L64.439,10.657L63.387,10.657L63.387,9.905h2.524Q66.48,9.024 67.082,7.832l0.795,0.462q-0.489,0.709 -1.123,1.611h1.466v0.752h-0.924v2.32h1.117v0.752h-1.117v4.641L66.523,18.37L66.523,13.729L65.208,13.729q-0.021,1.901 -0.274,2.739 -0.29,0.967 -1.257,2.009 -0.312,-0.419 -0.537,-0.698 0.816,-0.838 1.053,-1.687 0.22,-0.72 0.242,-2.363h-1.241zM71.658,11.849h-1.923l-0.387,5.253q0.838,-0.269 1.901,-0.688 0,0.537 0.011,0.838 -1.085,0.365 -2.181,0.763 -0.258,0.107 -0.494,0.247l-0.451,-0.741q0.397,-0.183 0.451,-0.559L69.145,9.389L68.178,9.389L68.178,8.616h5.264v0.773h-3.523l-0.124,1.697h2.637l-0.086,5.973q-0.005,0.301 0.29,0.301 0.252,0 0.279,-0.269 0.107,-0.763 0.183,-1.934 0.344,0.15 0.763,0.29 -0.086,1.01 -0.183,1.762 -0.118,0.902 -0.902,0.902h-0.29q-0.918,0 -0.902,-0.988zM65.213,12.977h1.311v-2.32h-1.311zM70.144,13.042q0.752,0.591 1.461,1.235 -0.279,0.312 -0.559,0.602 -0.666,-0.698 -1.364,-1.311zM63.967,8.283 L64.579,7.875q0.655,0.902 1.021,1.429L64.901,9.776Q64.364,8.863 63.967,8.283Z"
android:strokeWidth="1"
android:fillColor="#434760"
android:fillType="evenOdd"
android:strokeColor="#00000000"/>
<path
android:pathData="M82,9.359l3.29,3.32l-3.29,3.32"
android:strokeLineJoin="round"
android:strokeWidth="1"
android:fillColor="#00000000"
android:strokeColor="#656565"
android:fillType="evenOdd"/>
</vector>

View File

@ -0,0 +1,94 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:aapt="http://schemas.android.com/aapt"
android:width="93dp"
android:height="25dp"
android:viewportWidth="93"
android:viewportHeight="25">
<path
android:pathData="M4.15,0.15L88.85,0.15A4,4 0,0 1,92.85 4.15L92.85,20.85A4,4 0,0 1,88.85 24.85L4.15,24.85A4,4 0,0 1,0.15 20.85L0.15,4.15A4,4 0,0 1,4.15 0.15z"
android:strokeWidth="0.3"
android:fillColor="#00000000"
android:fillType="evenOdd">
<aapt:attr name="android:strokeColor">
<gradient
android:startX="92.85"
android:startY="12.5"
android:endX="0.15"
android:endY="12.5"
android:type="linear">
<item android:offset="0" android:color="#29E4F2FF"/>
<item android:offset="0.21" android:color="#FFCFE3F7"/>
<item android:offset="0.735" android:color="#FFCFE3F7"/>
<item android:offset="1" android:color="#29DCEEFF"/>
</gradient>
</aapt:attr>
</path>
<path
android:pathData="M6,3.5h17v17h-17z"
android:strokeAlpha="0"
android:strokeWidth="1"
android:fillColor="#000000"
android:fillType="nonZero"
android:strokeColor="#00000000"
android:fillAlpha="0"/>
<path
android:pathData="M10.25,4.35L10.25,7.359L18.75,7.359L18.75,4.35L22.15,4.35C22.619,4.35 23,4.731 23,5.2L23,19.65C23,20.119 22.619,20.5 22.15,20.5L6.85,20.5C6.381,20.5 6,20.119 6,19.65L6,5.2C6,4.731 6.381,4.35 6.85,4.35L10.25,4.35ZM17.883,3.5L17.883,6.373L11.083,6.373L11.083,3.5L17.883,3.5Z"
android:strokeWidth="1"
android:fillColor="#9A9DAE"
android:fillType="nonZero"
android:strokeColor="#00000000"/>
<path
android:pathData="M10.25,4.35L10.25,7.359L18.75,7.359L18.75,4.35L22.15,4.35C22.619,4.35 23,4.731 23,5.2L23,19.65C23,20.119 22.619,20.5 22.15,20.5L6.85,20.5C6.381,20.5 6,20.119 6,19.65L6,5.2C6,4.731 6.381,4.35 6.85,4.35L10.25,4.35ZM17.883,3.5L17.883,6.373L11.083,6.373L11.083,3.5L17.883,3.5Z"
android:strokeWidth="1"
android:fillType="nonZero"
android:strokeColor="#00000000">
<aapt:attr name="android:fillColor">
<gradient
android:startX="14.5"
android:startY="26.678"
android:endX="14.5"
android:endY="3.5"
android:type="linear">
<item android:offset="0" android:color="#FF29A4FF"/>
<item android:offset="1" android:color="#FF81D4FA"/>
</gradient>
</aapt:attr>
</path>
<path
android:pathData="M18.835,17.1l0,-1.7l-8.5,0l0,1.7l8.5,0z"
android:strokeWidth="1"
android:fillColor="#9A9DAE"
android:fillType="nonZero"
android:strokeColor="#00000000"/>
<path
android:pathData="M18.835,17.1l0,-1.7l-8.5,0l0,1.7l8.5,0z"
android:strokeWidth="1"
android:fillColor="#FFFFFF"
android:fillType="nonZero"
android:strokeColor="#00000000"/>
<path
android:pathData="M18.835,12.927l0,-1.777l-8.5,0l0,1.777z"
android:strokeWidth="1"
android:fillColor="#9A9DAE"
android:fillType="nonZero"
android:strokeColor="#00000000"/>
<path
android:pathData="M18.835,12.927l0,-1.777l-8.5,0l0,1.777z"
android:strokeWidth="1"
android:fillColor="#FFFFFF"
android:fillType="nonZero"
android:strokeColor="#00000000"/>
<path
android:pathData="m30.698,9.271h3.964v-1.375h0.892v1.375h3.975v6.037h-3.975v1.257q0,0.655 0.688,0.655h2.514q0.73,0 0.892,-0.483 0.172,-0.526 0.247,-1.515 0.312,0.14 0.892,0.333 -0.129,0.859 -0.29,1.472 -0.269,1.01 -1.461,1.01h-2.857q-1.515,0 -1.515,-1.482v-1.246h-3.072v0.741h-0.892zM38.637,14.502v-1.837h-3.083v1.837zM31.59,14.502h3.072v-1.837h-3.072zM38.637,10.077h-3.083v1.826h3.083zM31.59,11.903h3.072L34.662,10.077h-3.072zM41.215,12.708h4.995L46.21,11.527L49.293,9.282L42.343,9.282L42.343,8.476h8.379v0.838l-3.599,2.632v0.763h4.705v0.806h-4.705v3.384q0,1.439 -1.504,1.439 -0.494,0 -1.697,-0.021 -0.043,-0.43 -0.129,-0.978 0.784,0.097 1.654,0.107 0.763,0 0.763,-0.773L46.21,13.514h-4.995zM52.312,16.833h4.705L57.017,9.668L52.924,9.668L52.924,8.809h9.152v0.859h-4.114v7.165h4.716v0.838L52.312,17.671ZM63.215,15.437h4.866v-1.214h-2.976v0.505L64.289,14.728L64.289,9.518h2.229Q66.002,8.917 65.406,8.283L66.019,7.778q0.795,0.763 1.396,1.407l-0.397,0.333h2.519q0.591,-0.784 1.198,-1.708l0.859,0.462q-0.553,0.671 -1.069,1.246h2.197v5.21h-0.816v-0.505h-2.986v1.214h4.866v0.773h-4.866v2.267h-0.838v-2.267h-4.866zM68.919,13.471h2.986v-1.246h-2.986zM65.105,13.471h2.976v-1.246h-2.976zM71.905,10.27h-2.986v1.225h2.986zM65.105,11.495h2.976L68.081,10.27h-2.976z"
android:strokeWidth="1"
android:fillColor="#434760"
android:fillType="evenOdd"
android:strokeColor="#00000000"/>
<path
android:pathData="M82,9.359l3.29,3.32l-3.29,3.32"
android:strokeLineJoin="round"
android:strokeWidth="1"
android:fillColor="#00000000"
android:strokeColor="#656565"
android:fillType="evenOdd"/>
</vector>

View File

@ -0,0 +1,132 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:aapt="http://schemas.android.com/aapt"
android:width="93dp"
android:height="25dp"
android:viewportWidth="93"
android:viewportHeight="25">
<path
android:pathData="M-41,-407h375v812h-375z"
android:strokeWidth="1"
android:fillColor="#F3F6F8"
android:fillType="evenOdd"
android:strokeColor="#00000000"/>
<path
android:pathData="M-41,-407L334,-407L334,405L-41,405L-41,-407ZM-1,-407L294,-407C316.091,-407 334,-389.091 334,-367L334,365C334,387.091 316.091,405 294,405L-1,405C-23.091,405 -41,387.091 -41,365L-41,-367C-41,-389.091 -23.091,-407 -1,-407ZM65.039,-376L227.961,-376C240.663,-376 250.961,-386.297 250.961,-399C250.961,-399.009 250.959,-400.285 250.954,-402.831L250.954,-402.831C250.954,-402.923 250.97,-403.014 251.002,-403.1C251.002,-403.1 251.002,-403.1 251.002,-403.1C251.668,-404.927 253.211,-406.324 255.108,-406.784L256,-407L37,-407L37.892,-406.784C39.78,-406.326 41.333,-404.914 42.004,-403.1C42.019,-403.06 42.033,-403.014 42.046,-402.963L42.046,-402.963L42.039,-399.039L42.039,-399.039C42.039,-386.297 52.337,-376 65.039,-376Z"
android:strokeWidth="1"
android:fillColor="#000000"
android:fillType="evenOdd"
android:strokeColor="#00000000"/>
<path
android:pathData="M-22.5,-266L315.5,-266C319.918,-266 323.5,-262.418 323.5,-258L323.5,36C323.5,40.418 319.918,44 315.5,44L-22.5,44C-26.918,44 -30.5,40.418 -30.5,36L-30.5,-258C-30.5,-262.418 -26.918,-266 -22.5,-266Z"
android:strokeWidth="1"
android:fillColor="#000000"
android:fillType="evenOdd"
android:strokeColor="#00000000"/>
<path
android:pathData="M315.5,-265.7C317.626,-265.7 319.551,-264.838 320.945,-263.445C322.338,-262.051 323.2,-260.126 323.2,-258L323.2,36C323.2,38.126 322.338,40.051 320.945,41.445C319.551,42.838 317.626,43.7 315.5,43.7L-22.5,43.7C-24.626,43.7 -26.551,42.838 -27.945,41.445C-29.338,40.051 -30.2,38.126 -30.2,36L-30.2,-258C-30.2,-260.126 -29.338,-262.051 -27.945,-263.445C-26.551,-264.838 -24.626,-265.7 -22.5,-265.7Z"
android:strokeWidth="0.6"
android:fillColor="#FFFFFF"
android:fillType="evenOdd"
android:strokeColor="#E6E6E6"/>
<path
android:pathData="M4.15,0.15L88.85,0.15A4,4 0,0 1,92.85 4.15L92.85,20.85A4,4 0,0 1,88.85 24.85L4.15,24.85A4,4 0,0 1,0.15 20.85L0.15,4.15A4,4 0,0 1,4.15 0.15z"
android:strokeWidth="0.3"
android:fillColor="#00000000"
android:fillType="evenOdd">
<aapt:attr name="android:strokeColor">
<gradient
android:startX="92.85"
android:startY="12.5"
android:endX="0.15"
android:endY="12.5"
android:type="linear">
<item android:offset="0" android:color="#29FFF2E4"/>
<item android:offset="0.21" android:color="#FFF7DDCF"/>
<item android:offset="0.735" android:color="#FFF7D9CF"/>
<item android:offset="1" android:color="#29FFECDC"/>
</gradient>
</aapt:attr>
</path>
<path
android:pathData="m30.72,13.869q2.589,-0.295 4.034,-0.682 -1.289,-0.344 -2.605,-0.671 0.44,-0.473 0.838,-0.935h-2.557v-0.709h3.137q0.408,-0.516 0.752,-1.021l0.87,0.247q-0.29,0.387 -0.618,0.773h6v0.709h-2.31q-0.51,0.908 -1.38,1.472 1.536,0.403 2.884,0.773l-0.344,0.72q-1.703,-0.537 -3.464,-1.026 -1.633,0.645 -4.925,1.058 -0.129,-0.344 -0.312,-0.709zM40.86,17.338q-0.365,0.43 -0.623,0.806 -2.836,-0.849 -4.351,-2.079v2.422h-0.773v-2.406q-1.627,1.149 -4.329,2.073 -0.247,-0.312 -0.623,-0.73 2.771,-0.693 4.388,-1.708h-4.141v-0.72h4.705v-0.881h0.773v0.881h4.77v0.72h-4.184q1.697,1.144 4.388,1.622zM30.72,8.863h4.501Q35.017,8.492 34.748,8.1l0.763,-0.344q0.349,0.548 0.661,1.106h4.098v1.622L39.453,10.485L39.453,9.572h-7.917v0.913h-0.816zM33.373,12.171q1.311,0.322 2.514,0.628 0.945,-0.419 1.477,-1.219h-3.421q-0.274,0.295 -0.569,0.591zM44.352,13.879h3.728v-2.718h-2.046q-0.435,1.155 -0.951,2.063 -0.312,-0.301 -0.709,-0.569 1.021,-1.794 1.504,-4.007l0.87,0.247q-0.209,0.8 -0.451,1.515h1.783L48.079,7.917h0.859v2.492h2.567v0.752h-2.567v2.718h2.922v0.752h-2.922v3.76h-0.859v-3.76h-3.728zM41.118,13.235q1.482,-2.191 2.385,-5.307l0.881,0.258Q43.986,9.438 43.524,10.533v7.869L42.676,18.402L42.676,12.306Q42.128,13.321 41.505,14.169 41.344,13.708 41.118,13.235ZM52.838,8.412h3.459L56.297,15.426h-0.795v-0.408h-1.869v0.483h-0.795zM57.425,12.204h4.78v3.309h-0.795v-0.333h-3.19v0.333L57.425,15.512ZM57.06,9.078L57.06,8.369h5.199q-0.043,1.128 -0.107,1.944 -0.107,1.343 -1.396,1.343 -0.43,0 -1.268,-0.032 -0.064,-0.397 -0.161,-0.849 0.849,0.107 1.289,0.107 0.688,0 0.741,-0.623 0.064,-0.763 0.064,-1.182h-2.261q-0.027,2.159 -1.993,3.255 -0.247,-0.322 -0.559,-0.634 1.772,-0.935 1.762,-2.621zM61.41,12.891h-3.19v1.601h3.19zM53.633,14.288h1.869L55.502,12.042h-1.869zM55.502,9.142h-1.869v2.17h1.869zM53.45,15.749 L54.213,16.039q-0.408,0.999 -1.16,2.353 -0.365,-0.172 -0.763,-0.344 0.795,-1.332 1.16,-2.299zM60.637,16.06 L61.324,15.652q0.752,1.031 1.354,2.073l-0.752,0.44q-0.58,-1.063 -1.289,-2.105zM55.276,16.221 L55.985,15.899q0.591,1.063 0.999,1.998l-0.773,0.344q-0.387,-0.956 -0.935,-2.02zM58.037,16.146 L58.746,15.834q0.58,0.978 1.031,1.934l-0.763,0.365q-0.473,-1.074 -0.978,-1.987zM65.17,8.1h0.913L66.083,11.011L69.972,11.011L69.972,7.907h0.913L70.885,11.011h2.879v0.806h-7.681q0,0.688 -0.032,1.891h5.296v4.684h-0.924v-3.867h-4.437q-0.215,2.32 -1.794,3.921 -0.29,-0.387 -0.677,-0.763 0.988,-1.042 1.321,-2.095 0.333,-0.945 0.333,-3.029z"
android:strokeWidth="1"
android:fillColor="#434760"
android:fillType="evenOdd"
android:strokeColor="#00000000"/>
<path
android:pathData="M82,9.359l3.29,3.32l-3.29,3.32"
android:strokeLineJoin="round"
android:strokeWidth="1"
android:fillColor="#00000000"
android:strokeColor="#656565"
android:fillType="evenOdd"/>
<path
android:pathData="M21.957,4.594C22.527,4.594 22.94,4.759 23.196,5.088C23.451,5.416 23.579,5.844 23.579,6.37L23.579,19.375C23.579,19.711 23.44,20.022 23.163,20.307C22.885,20.592 22.542,20.735 22.132,20.735L7.17,20.735C6.819,20.735 6.505,20.588 6.227,20.296C5.95,20.004 5.811,19.66 5.811,19.266L5.811,6.041C5.811,5.617 5.928,5.27 6.162,5C6.395,4.729 6.702,4.594 7.082,4.594L21.957,4.594Z"
android:strokeWidth="1"
android:fillColor="#000000"
android:fillType="nonZero"
android:strokeColor="#00000000"/>
<path
android:pathData="M21.957,4.594C22.527,4.594 22.94,4.759 23.196,5.088C23.451,5.416 23.579,5.844 23.579,6.37L23.579,19.375C23.579,19.711 23.44,20.022 23.163,20.307C22.885,20.592 22.542,20.735 22.132,20.735L7.17,20.735C6.819,20.735 6.505,20.588 6.227,20.296C5.95,20.004 5.811,19.66 5.811,19.266L5.811,6.041C5.811,5.617 5.928,5.27 6.162,5C6.395,4.729 6.702,4.594 7.082,4.594L21.957,4.594Z"
android:strokeWidth="1"
android:fillType="nonZero"
android:strokeColor="#00000000">
<aapt:attr name="android:fillColor">
<gradient
android:startX="14.695"
android:startY="26.601"
android:endX="14.695"
android:endY="4.594"
android:type="linear">
<item android:offset="0" android:color="#FF29A6FF"/>
<item android:offset="1" android:color="#FF81D4FA"/>
</gradient>
</aapt:attr>
</path>
<path
android:pathData="M21.957,4.594C22.527,4.594 22.94,4.759 23.196,5.088C23.451,5.416 23.579,5.844 23.579,6.37L23.579,19.375C23.579,19.711 23.44,20.022 23.163,20.307C22.885,20.592 22.542,20.735 22.132,20.735L7.17,20.735C6.819,20.735 6.505,20.588 6.227,20.296C5.95,20.004 5.811,19.66 5.811,19.266L5.811,6.041C5.811,5.617 5.928,5.27 6.162,5C6.395,4.729 6.702,4.594 7.082,4.594L21.957,4.594Z"
android:strokeWidth="1"
android:fillType="nonZero"
android:strokeColor="#00000000">
<aapt:attr name="android:fillColor">
<gradient
android:startX="14.695"
android:startY="1.818"
android:endX="14.695"
android:endY="26.968"
android:type="linear">
<item android:offset="0" android:color="#FFFDAABB"/>
<item android:offset="0.485" android:color="#FFFC919A"/>
<item android:offset="1" android:color="#FFFB787B"/>
</gradient>
</aapt:attr>
</path>
<path
android:pathData="M21.104,5.975C21.44,5.975 21.685,6.052 21.838,6.205C21.991,6.358 22.068,6.539 22.068,6.747L22.068,14.021L19.631,10.978L11.181,14.883C10.884,14.732 10.604,14.591 10.343,14.459L9.844,14.209C8.893,13.733 8.228,13.409 7.849,13.237C7.044,12.873 7.473,12.953 7.356,12.842L7.356,6.545C7.356,6.435 7.392,6.343 7.465,6.269C7.538,6.196 7.626,6.138 7.728,6.095C7.831,6.052 7.933,6.021 8.035,6.003C8.124,5.987 9.225,5.978 9.555,5.976ZM11.719,7.509C11.152,7.509 10.677,7.704 10.294,8.094C9.91,8.484 9.718,8.96 9.718,9.523C9.718,10.067 9.91,10.534 10.294,10.925C10.677,11.315 11.152,11.51 11.719,11.51C12.267,11.51 12.737,11.315 13.13,10.925C13.523,10.534 13.719,10.067 13.719,9.523C13.719,8.96 13.523,8.484 13.13,8.094C12.737,7.704 12.267,7.509 11.719,7.509Z"
android:strokeAlpha="0.9194801"
android:strokeWidth="1"
android:fillColor="#000000"
android:fillType="nonZero"
android:strokeColor="#00000000"
android:fillAlpha="0.9194801"/>
<path
android:pathData="M21.104,5.975C21.44,5.975 21.685,6.052 21.838,6.205C21.991,6.358 22.068,6.539 22.068,6.747L22.068,14.021L19.631,10.978L11.181,14.883C10.884,14.732 10.604,14.591 10.343,14.459L9.844,14.209C8.893,13.733 8.228,13.409 7.849,13.237C7.044,12.873 7.473,12.953 7.356,12.842L7.356,6.545C7.356,6.435 7.392,6.343 7.465,6.269C7.538,6.196 7.626,6.138 7.728,6.095C7.831,6.052 7.933,6.021 8.035,6.003C8.124,5.987 9.225,5.978 9.555,5.976ZM11.719,7.509C11.152,7.509 10.677,7.704 10.294,8.094C9.91,8.484 9.718,8.96 9.718,9.523C9.718,10.067 9.91,10.534 10.294,10.925C10.677,11.315 11.152,11.51 11.719,11.51C12.267,11.51 12.737,11.315 13.13,10.925C13.523,10.534 13.719,10.067 13.719,9.523C13.719,8.96 13.523,8.484 13.13,8.094C12.737,7.704 12.267,7.509 11.719,7.509Z"
android:strokeAlpha="0.9194801"
android:strokeWidth="1"
android:fillType="nonZero"
android:strokeColor="#00000000"
android:fillAlpha="0.9194801">
<aapt:attr name="android:fillColor">
<gradient
android:startX="14.706"
android:startY="18.12"
android:endX="14.706"
android:endY="5.975"
android:type="linear">
<item android:offset="0" android:color="#FFFFFFFF"/>
<item android:offset="0.233" android:color="#FFFFFFFF"/>
<item android:offset="1" android:color="#FFFFFFFF"/>
</gradient>
</aapt:attr>
</path>
</vector>

View File

@ -0,0 +1,18 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="31dp"
android:height="16dp"
android:viewportWidth="31"
android:viewportHeight="16">
<path
android:pathData="M2,0L29,0A2,2 0,0 1,31 2L31,14A2,2 0,0 1,29 16L2,16A2,2 0,0 1,0 14L0,2A2,2 0,0 1,2 0z"
android:strokeWidth="1"
android:fillColor="#354E9E"
android:fillType="evenOdd"
android:strokeColor="#00000000"/>
<path
android:pathData="M4.054,4.917 L4.674,4.371Q5.121,4.768 5.53,5.165L6.845,3.565L3.347,3.565v-0.868h4.638v0.868L6.15,5.785q0.211,0.223 0.409,0.434L6.063,6.653h2.257v0.831Q8.122,8.439 7.7,9.692 7.316,9.555 6.845,9.406 7.155,8.625 7.39,7.521L6.15,7.521v5.221q0,1.414 -1.389,1.414L3.446,14.157q-0.062,-0.446 -0.174,-1.005 0.62,0.074 1.253,0.074 0.695,0 0.695,-0.794L5.22,7.521L3.223,7.521L3.223,6.653L5.667,6.653Q4.86,5.686 4.054,4.917ZM8.891,5.227L10.987,5.227L11.297,3.528L8.445,3.528L8.445,2.66L15.489,2.66L15.489,3.528L12.302,3.528L11.942,5.227h2.977L14.919,11.329L14.013,11.329L14.013,6.083L9.796,6.083L9.796,11.329L8.891,11.329ZM11.421,6.591h0.918v1.848q0,1.451 -0.372,2.493 1.947,1.302 3.547,2.542l-0.682,0.806q-1.513,-1.29 -3.249,-2.53 -0.124,0.186 -0.248,0.36 -1.005,1.277 -3.15,2.27 -0.397,-0.508 -0.695,-0.819 2.22,-0.918 3.113,-2.096 0.819,-1.067 0.819,-3.088zM20.402,6.876q1.563,-2.307 2.369,-4.874l1.029,0.285q-0.372,0.924 -0.732,1.736h4.849q-0.174,5.655 -0.285,7.95 -0.112,1.972 -2.108,1.972 -1.166,0 -2.48,-0.074 -0.087,-0.484 -0.223,-1.116 1.414,0.174 2.592,0.174 1.141,0 1.191,-1.203 0.136,-1.749 0.248,-6.772L22.634,4.954Q21.959,6.343 21.295,7.36 20.898,7.124 20.402,6.876ZM17.847,9.555q1.898,-0.26 3.125,-0.459 -0.087,0.496 -0.112,0.943 -2.022,0.273 -4.142,0.62L16.495,9.741q0.936,-0.955 2.003,-2.629 -1.414,0.087 -2.115,0.149L16.148,6.417Q17.512,4.607 18.666,1.99L19.608,2.362q-1.178,2.27 -2.344,3.981 0.918,-0.019 1.743,-0.05 0.49,-0.819 1.011,-1.786l0.918,0.459q-1.6,2.654 -3.088,4.589zM16.123,12.408q2.729,-0.36 5.073,-0.769 -0.05,0.496 -0.074,0.967 -2.009,0.248 -4.775,0.769zM22.138,7.472 L22.932,6.951q1.191,1.525 2.096,2.865l-0.93,0.595Q23.267,9.047 22.138,7.472Z"
android:strokeWidth="1"
android:fillColor="#ffffff"
android:fillType="evenOdd"
android:strokeColor="#00000000"/>
</vector>

View File

@ -0,0 +1,18 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="31dp"
android:height="16dp"
android:viewportWidth="31"
android:viewportHeight="16">
<path
android:pathData="m2,0h27c1.108,0 2,0.892 2,2v12c0,1.108 -0.892,2 -2,2L2,16c-1.108,0 -2,-0.892 -2,-2v-12c0,-1.108 0.892,-2 2,-2z"
android:strokeWidth="1"
android:fillColor="#e0551f"
android:fillType="evenOdd"
android:strokeColor="#00000000"/>
<path
android:pathData="m10.422,4.389h0.99L11.412,6.522q0,1.631 -0.279,2.869h0.838v3.199q0,0.673 0.736,0.673h0.609q0.762,0 0.838,-0.686 0.076,-0.584 0.127,-1.663 0.432,0.178 1.041,0.394 -0.102,1.117 -0.203,1.676 -0.19,1.168 -1.663,1.168h-0.939q-1.511,0 -1.511,-1.435L11.006,9.905Q10.746,10.807 10.32,11.473 9.241,13.213 6.753,14.495 6.423,14.025 6.067,13.657 8.543,12.464 9.508,10.889 10.422,9.467 10.422,6.598ZM7.756,2.574L14.243,2.574L14.243,10.191L13.253,10.191L13.253,3.513L8.746,3.513L8.746,10.369L7.756,10.369ZM2.665,12.019Q3.579,11.772 4.582,11.486L4.582,7.792L2.906,7.792L2.906,6.878L4.582,6.878L4.582,3.932L2.805,3.932L2.805,3.018L7.375,3.018L7.375,3.932L5.572,3.932v2.945h1.625v0.914h-1.625v3.402q0.901,-0.273 1.866,-0.571 0.025,0.482 0.089,0.952 -2.184,0.673 -4.507,1.422zM16.109,13.086h5.383L21.492,9.988L16.947,9.988L16.947,9.061h4.545L21.492,7.284L18.191,7.284L18.191,6.395Q17.29,6.967 16.236,7.538 15.97,7.055 15.602,6.586 19.829,4.605 21.581,2.041h1.384l-0.292,0.355q2.019,2.577 5.713,4.012Q28.043,6.89 27.713,7.424 26.723,7.005 25.796,6.421L25.796,7.284L22.508,7.284L22.508,9.061h4.52v0.927h-4.52v3.098h5.408v0.939L16.109,14.025ZM22.013,3.12q-1.308,1.65 -3.771,3.237h7.452Q23.714,5.1 22.013,3.12ZM23.815,12.222q1.028,-1.066 1.739,-2.082l0.889,0.571q-0.889,1.104 -1.866,2.12zM17.531,10.762 L18.28,10.166q0.927,0.939 1.815,1.955l-0.863,0.686q-0.762,-1.003 -1.701,-2.044z"
android:strokeWidth="1"
android:fillColor="#ffffff"
android:fillType="evenOdd"
android:strokeColor="#00000000"/>
</vector>

View File

@ -0,0 +1,18 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="31dp"
android:height="16dp"
android:viewportWidth="31"
android:viewportHeight="16">
<path
android:pathData="m2,-0h27c1.108,0 2,0.892 2,2v12c0,1.108 -0.892,2 -2,2L2,16c-1.108,0 -2,-0.892 -2,-2v-12c0,-1.108 0.892,-2 2,-2z"
android:strokeWidth="1"
android:fillColor="#35899e"
android:fillType="evenOdd"
android:strokeColor="#00000000"/>
<path
android:pathData="M5.256,10.191Q4.971,12.641 3.346,14.622 2.939,14.228 2.47,13.86 3.701,12.527 4.12,10.686 4.412,9.328 4.412,6.928L4.412,2.536h8.48v9.902q0,1.879 -1.79,1.879 -0.749,0 -1.93,-0.025 -0.063,-0.457 -0.19,-1.066 1.168,0.076 1.841,0.076 1.028,0 1.028,-1.003L11.852,10.191ZM5.358,9.264L11.852,9.264L11.852,6.827L5.453,6.827q0,1.27 -0.095,2.437zM5.453,3.488v2.412h6.398L11.852,3.488ZM20.332,9.328h6.703v5.154L26.045,14.482L26.045,13.695h-4.723v0.787L20.332,14.482ZM20.078,6.916h3.098L23.176,4.935L19.659,4.935L19.659,4.021h3.517v-2.031h1.016v2.031h3.555v0.914h-3.555v1.98h3.11L27.302,7.83L20.078,7.83ZM16.815,9.62q1.688,-0.241 2.793,-0.432 -0.076,0.495 -0.114,0.965 -1.409,0.203 -3.847,0.597l-0.203,-0.939q0.813,-0.844 1.936,-2.679 -1.066,0.07 -1.936,0.14L15.203,6.408q1.168,-1.562 2.425,-4.507l0.965,0.381q-1.371,2.691 -2.247,4.05 0.736,-0.019 1.536,-0.044 0.432,-0.736 0.901,-1.606l0.939,0.47Q18.275,7.563 16.815,9.62ZM26.045,10.216h-4.723v2.59h4.723zM15.152,12.616q2.349,-0.457 4.583,-1.003 -0.038,0.508 -0.038,0.965 -2.057,0.432 -4.266,1.016z"
android:strokeWidth="1"
android:fillColor="#ffffff"
android:fillType="evenOdd"
android:strokeColor="#00000000"/>
</vector>

View File

@ -41,16 +41,46 @@
</RelativeLayout>
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tv_tip"
<androidx.appcompat.widget.LinearLayoutCompat
android:id="@+id/ll_tip"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="5dp"
android:layout_gravity="center_vertical"
android:layout_marginTop="5dp"
android:gravity="center"
android:text="请务必逐字正楷填写您的名字"
android:textColor="@color/red"
android:textSize="15.dp"
android:textStyle="bold" />
android:orientation="horizontal">
<androidx.appcompat.widget.AppCompatTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:alpha="0.5"
android:gravity="center"
android:text="请务必"
android:textColor="@color/red"
android:textSize="15.dp"
android:textStyle="bold" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tv_tip"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:text="逐字、正楷"
android:textColor="@color/red"
android:textSize="15.dp"
android:textStyle="bold" />
<androidx.appcompat.widget.AppCompatTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:alpha="0.5"
android:gravity="center"
android:text="填写"
android:textColor="@color/red"
android:textSize="15.dp"
android:textStyle="bold" />
</androidx.appcompat.widget.LinearLayoutCompat>
<LinearLayout
android:id="@+id/bottom"