联合支付功能调试

This commit is contained in:
2026-03-20 18:06:22 +08:00
parent 549e8d303f
commit bf8444e5d5
15 changed files with 320 additions and 61 deletions
+2 -2
View File
@@ -4,10 +4,10 @@
<selectionStates>
<SelectionState runConfigName="app">
<option name="selectionMode" value="DROPDOWN" />
<DropdownSelection timestamp="2026-03-10T03:02:12.156794100Z">
<DropdownSelection timestamp="2026-03-20T06:04:19.673022300Z">
<Target type="DEFAULT_BOOT">
<handle>
<DeviceId pluginId="Default" identifier="serial=192.168.1.211:5555;connection=7435869e" />
<DeviceId pluginId="Default" identifier="serial=192.168.1.16:5555;connection=571832d0" />
</handle>
</Target>
</DropdownSelection>
+4 -2
View File
@@ -51,8 +51,10 @@ android {
kotlinOptions {
jvmTarget = "11"
}
viewBinding {
enable = true
buildFeatures {
viewBinding = true
buildConfig = true
}
}
@@ -140,6 +140,11 @@ class MainActivity : BaseActivity<ActivityMainBinding>() {
private var isStartRecognize = false
//0-联合支付,1-独立支付
val settlementMode by lazy {
SPUtil.getInstance().get(GlobalKey.KEY_SETTLEMENT_MODE, 1)
}
override fun getViewModel(): BaseViewModel {
return viewModel
}
@@ -245,6 +250,18 @@ class MainActivity : BaseActivity<ActivityMainBinding>() {
SensorScaleUtils.addWeightListener { weight ->
log("registerDataChange weight = $weight")
//runOnUiThread { binding.tvShowWeight.text="${weight*1000}克" }
if (presentation?.jointPaymentQueryFinish == true) {
//0-即放即取,1-余量计量
val mealPickupMode = SPUtil.getInstance().get(GlobalKey.KEY_PICKUP_MODE, 0) ?: 0
if (mealPickupMode == 0 && weight <= 0.005) {
isAnalyzing = false
presentation?.step1FoodRecognizing()
} else {
return@addWeightListener
}
}
//if (presentation?.currentFood == null) return@addWeightListener
if (lastWeight - weight > 0.005) {
//及放及取,从秤上拿走超过5克
if (presentation?.mealPickupMode == 0) {
@@ -295,8 +312,6 @@ class MainActivity : BaseActivity<ActivityMainBinding>() {
} else {
block()
}
//0-联合支付,1-独立支付
val settlementMode = SPUtil.getInstance().get(GlobalKey.KEY_SETTLEMENT_MODE, 1)
if (presentation?.mealPickupMode == 1 || settlementMode == 0) {
lastWeight = weight
}
@@ -602,8 +617,6 @@ class MainActivity : BaseActivity<ActivityMainBinding>() {
binding.btnPay.run {
//0-计费,1-不计费
val chargeMode = SPUtil.getInstance().get(GlobalKey.KEY_CHARGE_MODE, 0)
//0-联合支付,1-独立支付
val settlementMode = SPUtil.getInstance().get(GlobalKey.KEY_SETTLEMENT_MODE, 1)
if (settlementMode == 1 && chargeMode == 0) visible() else gone()
}
}
@@ -651,11 +664,9 @@ class MainActivity : BaseActivity<ActivityMainBinding>() {
userId: String?,
isMember:Boolean,
notEnoughOneBlock: () -> Unit = {},
block: () -> Unit
successBlock: () -> Unit
) {
log("foodWeight=$foodWeight,eatWeight=$eatWeight")
//0-联合支付,1-独立支付
val settlementMode = SPUtil.getInstance().get(GlobalKey.KEY_SETTLEMENT_MODE, 1)
//0-计费,1-不计费
val chargeMode = SPUtil.getInstance().get(GlobalKey.KEY_CHARGE_MODE, 0)
//0-即放即取,1-余量计量
@@ -693,10 +704,10 @@ class MainActivity : BaseActivity<ActivityMainBinding>() {
paymentFrom = if (settlementMode == 0) 1 else 2,
member = isMember
)
submitOrder(order, block)
submitOrder(order, successBlock)
}
private fun submitOrder(order: FoodOrder, block: () -> Unit) {
private fun submitOrder(order: FoodOrder, successBlock: () -> Unit) {
viewModel.createOrder(order) { orderId ->
runOnUiThread {
binding.root.postDelayed({
@@ -706,7 +717,7 @@ class MainActivity : BaseActivity<ActivityMainBinding>() {
return@postDelayed
}
foodOrderId = orderId
block()
successBlock()
if (checkedItem!!.isFromSearch == true) {
//当前菜名为手动搜索选择,非识别结果,保存向量数据
@@ -1055,8 +1066,6 @@ class MainActivity : BaseActivity<ActivityMainBinding>() {
log("registerDataChange photoUri 识别数据名称:$foodName")
runOnUiThread {
binding.flPay.run {
//0-联合支付,1-独立支付
val settlementMode = SPUtil.getInstance().get(GlobalKey.KEY_SETTLEMENT_MODE, 1)
//0-计费,1-不计费
val chargeMode = SPUtil.getInstance().get(GlobalKey.KEY_CHARGE_MODE, 0)
//独立支付+计费模式才显示“去结算”按钮,否则使用人脸识别
@@ -0,0 +1,51 @@
package com.sw.dualscreen.adapter
import android.annotation.SuppressLint
import android.content.Context
import android.view.LayoutInflater
import android.view.ViewGroup
import android.widget.TextView
import androidx.core.graphics.toColorInt
import androidx.core.view.updateLayoutParams
import androidx.recyclerview.widget.RecyclerView
import com.chad.library.adapter4.BaseQuickAdapter
import com.chad.library.adapter4.viewholder.QuickViewHolder
import com.sw.dualscreen.databinding.LayoutFoodListHeaderBinding
import com.sw.dualscreen.ext.dp
import com.sw.dualscreen.ext.format2String
import com.sw.dualscreen.model.response.FoodItem
class FoodOrderAdapter(var list: MutableList<FoodItem>) :
BaseQuickAdapter<FoodItem, FoodOrderAdapter.VH>(list) {
inner class VH(var binding: LayoutFoodListHeaderBinding) : QuickViewHolder(binding.root)
override fun onCreateViewHolder(context: Context, parent: ViewGroup, viewType: Int): VH {
val inflater = LayoutInflater.from(context)
val binding = LayoutFoodListHeaderBinding.inflate(inflater, parent, false)
return VH(binding)
}
@SuppressLint("SetTextI18n")
override fun onBindViewHolder(holder: VH, position: Int, item: FoodItem?) {
val binding = holder.binding
item?.let {
binding.tvFoodName.text = it.foodName
binding.tvPriceNorm.text = it.foodPrice.format2String(2)
binding.tvWeight.text = "${it.num}"
binding.tvAmount.text = it.price.format2String(2)
}
setTextColor(binding.tvFoodName, binding.tvPriceNorm, binding.tvWeight, binding.tvAmount)
binding.root.updateLayoutParams<RecyclerView.LayoutParams> {
topMargin = 2.dp
bottomMargin = 2.dp
}
}
fun setTextColor(vararg tvList: TextView) {
tvList.forEach {
it.setTextColor("#FF33446A".toColorInt())
}
}
}
@@ -7,8 +7,10 @@ import android.graphics.BitmapFactory
import android.graphics.ImageFormat
import android.graphics.Rect
import android.graphics.YuvImage
import android.util.DisplayMetrics
import android.util.TypedValue
import android.view.View
import android.view.WindowManager
import android.view.inputmethod.EditorInfo
import android.view.inputmethod.InputMethodManager
import android.widget.EditText
@@ -159,3 +161,14 @@ fun View.invisible() {
fun View.gone() {
visibility = View.GONE
}
val Context.screenSize: IntArray
get() {
val windowManager = getSystemService(Context.WINDOW_SERVICE) as WindowManager
val displayMetrics = DisplayMetrics()
windowManager.defaultDisplay.getMetrics(displayMetrics)
return intArrayOf(
displayMetrics.widthPixels,
displayMetrics.heightPixels
)
}
@@ -127,7 +127,7 @@ data class RespCodeMsg(
data class PostEvent(var name: String = "")
data class UpdateRefreshEvent(var name:String = "")
data class UpdateRefreshEvent(var name: String = "")
data class PaySuccessEvent(
var name: String = ""
)
@@ -162,4 +162,29 @@ data class WeightRecord(
var foodInfo: FoodInfo? = null,
var lastWeight: Int = 0,
var currentWeight: Int = 0
)
data class FoodItem(
val id: String? = null,
val foodId: String? = null,
val foodName: String? = null,
val foodMaterialId: String? = null,
val specId: String? = null,
val num: Int = 0,
val eatNum: Int = 0,
val price: Double = 0.0,
val foodPrice: Double = 0.0,
val discount: Double = 0.0,
val income: Double = 0.0,
val foodDifferenceId: Long = 0,
val createTime: String? = null
)
data class FoodOrderModel(
val calorie: Double = 0.0,
val incomeSum: Double = 0.0,
val discountSum: Double = 0.0,
val eatWeightSum: Int = 0,
val orderNo: String? = null,
val list: List<FoodItem>? = null
)
@@ -1,5 +1,6 @@
package com.sw.dualscreen.network
import com.sw.dualscreen.BuildConfig
import com.sw.dualscreen.MyApp
import com.sw.dualscreen.network.api.ApiService
import com.sw.dualscreen.network.interceptor.RequestInterceptor
@@ -22,7 +23,7 @@ object ApiClient {
.addNetworkInterceptor(HttpLoggingInterceptor(logger = {
Timber.d("okhttp logger ==>${it}")
}).apply {
level = if (MyApp.DEBUG) {
level = if (BuildConfig.DEBUG) {
HttpLoggingInterceptor.Level.BODY
} else {
HttpLoggingInterceptor.Level.NONE
@@ -8,6 +8,7 @@ import com.sw.dualscreen.model.response.DinnerType
import com.sw.dualscreen.model.response.FaceData
import com.sw.dualscreen.model.response.FoodInfo
import com.sw.dualscreen.model.response.FoodOrder
import com.sw.dualscreen.model.response.FoodOrderModel
import com.sw.dualscreen.model.response.FoodSearchReq
import com.sw.dualscreen.model.response.FoodVector
import com.sw.dualscreen.model.response.MemberInfo
@@ -311,4 +312,13 @@ interface ApiService {
@Url url: String = "${GlobalData.appBaseUrl}/terminal/neglect/boothMachine/app/deleteBoothMachineCollection",
@QueryMap param: MutableMap<String, String?>
): ApiResponse<Any?>
/**
* 档口机向量数据分页查询
*/
@GET
suspend fun getFoodOrderList(
@Url url: String = "${GlobalData.appBaseUrl}/terminal/neglect/settlement/terminal/app/getFoodInfoBySettlement",
@Query("userId") userId: String
): ApiResponse<FoodOrderModel?>
}
@@ -19,6 +19,7 @@ package com.sw.dualscreen.objbox
import android.content.Context
import android.os.Environment
import android.util.Log
import com.sw.dualscreen.BuildConfig
import com.sw.plate.App
import io.objectbox.Box
import io.objectbox.BoxStore
@@ -91,14 +92,14 @@ object ObjectBox {
}
}
// if (BuildConfig.DEBUG) {
val syncAvailable = if (Sync.isAvailable()) "available" else "unavailable"
Timber.tag(TAG)
.d("Using ObjectBox ${BoxStore.getVersion()} (${BoxStore.getVersionNative()}, sync $syncAvailable)")
// Enable ObjectBox Admin on debug builds.
// https://docs.objectbox.io/data-browser
Admin(boxStore).start(context.applicationContext)
// }
if (BuildConfig.DEBUG) {
val syncAvailable = if (Sync.isAvailable()) "available" else "unavailable"
Timber.tag(TAG)
.d("Using ObjectBox ${BoxStore.getVersion()} (${BoxStore.getVersionNative()}, sync $syncAvailable)")
// Enable ObjectBox Admin on debug builds.
// https://docs.objectbox.io/data-browser
Admin(boxStore).start(context.applicationContext)
}
}
@@ -1,6 +1,7 @@
package com.sw.dualscreen.presentation
import android.Manifest
import android.annotation.SuppressLint
import android.app.Presentation
import android.content.pm.PackageManager
import android.graphics.Bitmap
@@ -21,14 +22,18 @@ import androidx.annotation.RequiresApi
import androidx.core.content.ContextCompat
import androidx.core.view.isInvisible
import androidx.core.view.isVisible
import androidx.core.view.postDelayed
import androidx.core.view.updateLayoutParams
import androidx.lifecycle.Observer
import androidx.lifecycle.lifecycleScope
import androidx.recyclerview.widget.LinearLayoutManager
import com.arcsoft.face.ErrorInfo
import com.sw.dualscreen.BuildConfig
import com.sw.dualscreen.GlobalKey
import com.sw.dualscreen.MyApp
import com.sw.dualscreen.R
import com.sw.dualscreen.activity.MainActivity
import com.sw.dualscreen.adapter.FoodOrderAdapter
import com.sw.dualscreen.databinding.PresentationMainScreenBinding
import com.sw.dualscreen.ext.dp
import com.sw.dualscreen.ext.format2String
@@ -36,9 +41,11 @@ import com.sw.dualscreen.ext.gone
import com.sw.dualscreen.ext.load
import com.sw.dualscreen.ext.maskName
import com.sw.dualscreen.ext.roundedDecimalPlace
import com.sw.dualscreen.ext.screenSize
import com.sw.dualscreen.ext.visible
import com.sw.dualscreen.model.response.DinnerType
import com.sw.dualscreen.model.response.FoodInfo
import com.sw.dualscreen.model.response.FoodItem
import com.sw.dualscreen.model.response.UserEnergy
import com.sw.dualscreen.model.response.UserNutrition
import com.sw.dualscreen.utils.Debouncer
@@ -128,9 +135,7 @@ class MainScreenPresentation(
initView()
//0-计费,1-不计费
val chargeMode = SPUtil.getInstance().get(GlobalKey.KEY_CHARGE_MODE, 0)
//0-联合支付,1-独立支付
val settlementMode = SPUtil.getInstance().get(GlobalKey.KEY_SETTLEMENT_MODE, 1)
if (settlementMode == 0 || chargeMode == 1) {
if (activity.settlementMode == 0 || chargeMode == 1) {
setupArcCamera()
}
registerDataChange()
@@ -291,6 +296,9 @@ class MainScreenPresentation(
LightManager.openGreenLight()
currentStep = 3
stepChangeCallback(currentStep)
binding.llTopInfo.visible()
binding.flFoodDetail.gone()
//根据接口数据更新热量数据--------------------------
userViewModel.getUserNutritionData(userId = userId) { nutrition ->
activity.runOnUiThread {
@@ -312,6 +320,11 @@ class MainScreenPresentation(
activity.hideWaitingDialog()
}
}
// TODO: 判断是联合支付调用接口查询就餐信息------------------------
if (activity.settlementMode == 0) {
loadOrderList(userId)
}
}
private fun initView() {
@@ -472,12 +485,15 @@ class MainScreenPresentation(
private var isFirstOpen = true
var startTime = 0L
var jointPaymentQueryFinish = false
/**
* 餐品识别中
*/
fun step1FoodRecognizing() {
Timber.tag(TAG).d("main,step1,耗时:${System.currentTimeMillis() - startTime}")
startTime = System.currentTimeMillis()
jointPaymentQueryFinish = false
hideStandbyScreen()
activity.resetTouchTime()
if (isFirstOpen.not()) {
@@ -501,6 +517,9 @@ class MainScreenPresentation(
stepChangeCallback(currentStep)
binding.llTopInfo.visible()
binding.flFoodDetail.gone()
binding.calorieInclude.root.gone()
binding.nutritionInclude.root.gone()
@@ -582,7 +601,7 @@ class MainScreenPresentation(
}
// 当前食物信息
private var currentFood: FoodInfo? = null
var currentFood: FoodInfo? = null
fun updateFood(foodInfo: FoodInfo?) {
//if (isLoadUnbilledMode) return
Timber.tag(TAG).d("main,updateFood,耗时:${System.currentTimeMillis() - startTime}")
@@ -594,8 +613,6 @@ class MainScreenPresentation(
binding.tvFoodName.text = foodInfo.foodName
binding.ivPreviewImage.gone()
binding.ivFrame.gone()
//0-联合支付,1-独立支付
val settlementMode = SPUtil.getInstance().get(GlobalKey.KEY_SETTLEMENT_MODE, 1)
//0-计费,1-不计费
val chargeMode = SPUtil.getInstance().get(GlobalKey.KEY_CHARGE_MODE, 0)
if (chargeMode == 0) {
@@ -609,12 +626,12 @@ class MainScreenPresentation(
binding.ivRecImage.gone()
}
//独立支付+计费模式,使用人脸识别
if (settlementMode == 1 && chargeMode == 0) {
if (activity.settlementMode == 1 && chargeMode == 0) {
//计费,查询营养信息、价格信息------------------------
loadBilledMode()
} else {
//联合支付,进行人脸识别
if (settlementMode == 0) {
if (activity.settlementMode == 0) {
step2FaceRecognizing(foodInfo)
} else {
//不计费,开启人脸识别
@@ -1169,28 +1186,37 @@ class MainScreenPresentation(
return
}
createOrder(notEnoughOneBlock = {
if (activity.settlementMode == 0) {
binding.flFoodDetail.gone()
binding.llTopInfo.visible()
}
// if (mealPickupMode == 0) {
currentStep = 2
step2FaceRecognizing(currentFood!!)
// }
}) {
}, successBlock = {
// TODO: 测试人脸识别问题--------------------
//recognizeViewModel.updateRegisterStatus(REGISTER_STATUS_READY)
if (MyApp.DEBUG) {
if (BuildConfig.DEBUG) {
ToastUtils.showToast("订单已生成")
}
currentUserId = null
isMember = false
//ToastUtils.showToast("isKeepFaceState=$isKeepFaceState,mealPickupMode=$mealPickupMode")
//|| isKeepFaceState
if (mealPickupMode == 1) {
step2FaceRecognizing(currentFood!!)
isKeepFaceState = false
} else {
if (activity.settlementMode == 0) {
activity.isAnalyzing = false
step1FoodRecognizing()
} else {
if (mealPickupMode == 1) {
step2FaceRecognizing(currentFood!!)
isKeepFaceState = false
} else {
activity.isAnalyzing = false
step1FoodRecognizing()
}
}
}
})
}
}
}
@@ -1198,9 +1224,7 @@ class MainScreenPresentation(
/**
* 人脸离开后调用创建订单接口
*/
fun createOrder(notEnoughOneBlock: () -> Unit = {}, block: () -> Unit) {
////0-联合支付,1-独立支付
//val settlementMode = SPUtil.getInstance().get(GlobalKey.KEY_SETTLEMENT_MODE, 1)
fun createOrder(notEnoughOneBlock: () -> Unit = {}, successBlock: () -> Unit) {
//0-即放即取,1-余量计量
mealPickupMode = SPUtil.getInstance().get(GlobalKey.KEY_PICKUP_MODE, 0) ?: 0
//if (settlementMode == 0) {
@@ -1231,9 +1255,9 @@ class MainScreenPresentation(
userId = currentUserId,
isMember = isMember ,
notEnoughOneBlock = notEnoughOneBlock,
block = {
successBlock = {
activity.runOnUiThread {
block()
successBlock()
}
}
)
@@ -1278,4 +1302,40 @@ class MainScreenPresentation(
// }
}
private var foodOrderList = mutableListOf<FoodItem>()
private val foodOrderAdapter by lazy {
FoodOrderAdapter(foodOrderList)
}
/**
* 加载订单列表
*/
@SuppressLint("NotifyDataSetChanged", "SetTextI18n")
private fun loadOrderList(userId: String) {
binding.llTopInfo.gone()
binding.flFoodDetail.visible()
binding.detailInclude.let {
it.root.updateLayoutParams {
height = activity.screenSize[1]/2
}
it.tvFoodList.run {
if (adapter == null) {
layoutManager = LinearLayoutManager(activity, LinearLayoutManager.VERTICAL, false)
adapter = foodOrderAdapter
}
}
userViewModel.getFoodOrderList(userId) { model ->
if (model == null) return@getFoodOrderList
foodOrderList.clear()
model.list?.let {
foodOrderList.addAll(model.list)
}
foodOrderAdapter.notifyDataSetChanged()
binding.detailInclude.tvTotalWeight.text = "总重量:${model.eatWeightSum}"
binding.detailInclude.tvTotalCalorie.text = "总热量:${model.calorie.roundToInt()}千卡"
jointPaymentQueryFinish = true
}
}
}
}
@@ -9,6 +9,7 @@ import com.sw.dualscreen.model.response.FaceData
import com.sw.dualscreen.model.response.FoodInfo
import com.sw.dualscreen.model.response.FoodSearchReq
import com.sw.dualscreen.model.response.FoodOrder
import com.sw.dualscreen.model.response.FoodOrderModel
import com.sw.dualscreen.model.response.FoodVector
import com.sw.dualscreen.model.response.MemberInfo
import com.sw.dualscreen.model.response.UserFaceModel
@@ -352,4 +353,10 @@ class RemoteRepository constructor(
)
}
}
suspend fun getFoodOrderList(userId: String): ApiResponse<FoodOrderModel?> {
return safeApiCall {
apiService.getFoodOrderList(userId = userId)
}
}
}
@@ -10,6 +10,7 @@ import com.sw.dualscreen.model.response.DeviceConfig
import com.sw.dualscreen.model.response.DinnerType
import com.sw.dualscreen.model.response.FoodInfo
import com.sw.dualscreen.model.response.FoodOrder
import com.sw.dualscreen.model.response.FoodOrderModel
import com.sw.dualscreen.model.response.FoodVector
import com.sw.dualscreen.model.response.MemberInfo
import com.sw.dualscreen.model.response.UserFaceModel
@@ -620,4 +621,16 @@ class UserViewModel : BaseViewModel() {
}
}
}
fun getFoodOrderList(userId: String, block: (FoodOrderModel?) -> Unit) {
Timber.tag(TAG).d("getFoodOrderList")
launchWithLoading {
val response = repository.getFoodOrderList(userId)
if (parseResponse(response)) {
block(response.data)
} else {
block(null)
}
}
}
}
@@ -4,7 +4,8 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
android:orientation="vertical"
tools:ignore="HardcodedText,UseCompatTextViewDrawableXml">
<FrameLayout
android:layout_width="match_parent"
@@ -19,7 +20,7 @@
android:textSize="30sp"
android:textStyle="bold"
android:drawablePadding="17dp"
app:drawableStartCompat="@drawable/ic_take_food" />
android:drawableStart="@drawable/ic_take_food" />
<TextView
android:id="@+id/tvUserName"
@@ -49,6 +50,7 @@
android:background="#FFDDE5F0" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/tvFoodList"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
@@ -69,7 +71,7 @@
android:textSize="26sp"
tools:text="总重量:680克"
android:drawablePadding="17dp"
app:drawableStartCompat="@drawable/ic_flag_weight" />
android:drawableStart="@drawable/ic_flag_weight" />
<Space
android:layout_width="0dp"
@@ -84,7 +86,7 @@
android:textSize="26sp"
tools:text="总热量:793千卡"
android:drawablePadding="17dp"
app:drawableStartCompat="@drawable/ic_flag_calorie" />
android:drawableStart="@drawable/ic_flag_calorie" />
</LinearLayout>
</LinearLayout>
@@ -0,0 +1,60 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="50dp"
android:orientation="horizontal"
android:gravity="center_vertical">
<!-- 菜品名称列,权重2.5 -->
<TextView
android:id="@+id/tvFoodName"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="2.5"
android:text="菜品名称"
android:textColor="#FF889AC2"
android:textSize="26sp"
android:paddingHorizontal="5dp"
android:singleLine="true"
android:gravity="center_vertical|start" />
<!-- 规格列,权重1.0 -->
<TextView
android:id="@+id/tvPriceNorm"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1.0"
android:text="规格"
android:textColor="#FF889AC2"
android:textSize="26sp"
android:paddingHorizontal="5dp"
android:singleLine="true"
android:gravity="center" />
<!-- 重量列,权重1.0 -->
<TextView
android:id="@+id/tvWeight"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1.0"
android:text="重量(克)"
android:textColor="#FF889AC2"
android:textSize="26sp"
android:paddingHorizontal="5dp"
android:singleLine="true"
android:gravity="center" />
<!-- 小计列,权重1.0 -->
<TextView
android:id="@+id/tvAmount"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1.0"
android:text="小计(元)"
android:textColor="#FF889AC2"
android:textSize="26sp"
android:paddingHorizontal="5dp"
android:singleLine="true"
android:gravity="center" />
</LinearLayout>
@@ -13,13 +13,13 @@
android:padding="28dp">
<LinearLayout
android:id="@+id/llSignlePage"
android:id="@+id/llTopInfo"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/setting_border"
android:orientation="vertical"
android:paddingBottom="26dp"
android:visibility="gone">
android:visibility="visible">
<TextView
android:id="@+id/tvFoodName"
@@ -32,10 +32,10 @@
android:textSize="40sp"
android:textStyle="bold" />
<!-- android:layout_width="300dp"-->
<!-- android:layout_height="450dp"-->
<!-- android:layout_width="330dp"-->
<!-- android:layout_height="495dp"-->
<!--android:layout_width="300dp"-->
<!--android:layout_height="450dp"-->
<!--android:layout_width="330dp"-->
<!--android:layout_height="495dp"-->
<FrameLayout
android:id="@+id/flCameraView"
android:layout_width="match_parent"
@@ -189,14 +189,19 @@
</LinearLayout>
<include
android:id="@+id/detailInclude"
<FrameLayout
android:id="@+id/flFoodDetail"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/setting_border"
android:orientation="vertical"
android:paddingBottom="26dp"
layout="@layout/layout_eat_detail"/>
android:paddingHorizontal="15dp"
android:visibility="gone">
<include
android:id="@+id/detailInclude"
layout="@layout/layout_eat_detail"/>
</FrameLayout>
<FrameLayout
android:id="@+id/flBottomView"