generallibrary/src/main/java/com/dayu/general/activity/CardReadActivity.kt
@@ -38,18 +38,16 @@ super.onCreate(savedInstanceState) binding = ActivityCardReadBinding.inflate(layoutInflater) setContentView(binding.root) initView() } private fun initView() { // 设置标题 binding.titleBar.setCenterText("读卡") // 设置TitleBar的返回按钮点击事件 binding.titleBar.setOnItemclickListner(TitleBar.ClickType_LEFT_IMAGE) { finish() } } @@ -73,8 +71,8 @@ } override fun onNfcBack(intent: Intent?) { intent?.let { handleNfcIntent(it) intent?.let { handleNfcIntent(it) } ?: run { showConfirmDialog("NFC数据异常,请重新刷卡") { } @@ -117,12 +115,13 @@ // 根据卡片类型进行不同处理 when (cardType) { CardCommon.USER_CARD_TYPE_1, CardCommon.USER_CARD_TYPE_2, CardCommon.USER_CARD_TYPE_1, CardCommon.USER_CARD_TYPE_2, CardCommon.USER_CARD_TYPE_3 -> { // 用户卡:解析卡内数据并调用接口 handleUserCard(cardNumber, cardType, nfcAdapter) } else -> { // 管理类卡:显示卡片类型信息 handleManagementCard(cardNumber, cardType) @@ -146,6 +145,23 @@ } return } binding.tvCardNumber.text = cardNumber // 输出用户卡内所有信息到日志 android.util.Log.d("CardReadActivity", "=== 用户卡信息 ===") android.util.Log.d("CardReadActivity", "卡号: $cardNumber") android.util.Log.d("CardReadActivity", "卡片类型: $cardType") android.util.Log.d("CardReadActivity", "国家行政区域号: ${userCard.areaNumber}") android.util.Log.d("CardReadActivity", "用户编号: ${userCard.userCode}") android.util.Log.d("CardReadActivity", "用户卡编号: ${userCard.userCodeNumber}") android.util.Log.d("CardReadActivity", "完整用户编号: ${userCard.getMyUserCode()}") android.util.Log.d("CardReadActivity", "手机号: ${userCard.phoneNumber}") android.util.Log.d("CardReadActivity", "项目编码: ${userCard.projectCode}") android.util.Log.d("CardReadActivity", "卡内余额: ${userCard.balance}") android.util.Log.d("CardReadActivity", "剩余水量: ${userCard.surplusWater}") android.util.Log.d("CardReadActivity", "水量单价: ${userCard.waterPrice}") android.util.Log.d("CardReadActivity", "电量单价: ${userCard.electricPrice}") android.util.Log.d("CardReadActivity", "充值时间: ${userCard.rechargeDate}") android.util.Log.d("CardReadActivity", "==================") // 根据卡号获取卡片详细信息 getCardInfo(cardNumber, cardType, userCard) @@ -156,7 +172,7 @@ */ private fun handleManagementCard(cardNumber: String, cardType: String) { val cardTypeName = getCardTypeName(cardType) // 显示管理卡信息 showManagementCardInfo(cardNumber, cardTypeName) } @@ -168,13 +184,12 @@ // 隐藏读卡提示,显示信息区域 binding.cardReadLL.visibility = android.view.View.GONE binding.cardInfoContainer.visibility = android.view.View.VISIBLE // 显示基本信息 binding.tvCardNumber.text = cardNumber binding.tvCardType.text = cardTypeName // 隐藏用户卡特有的字段 binding.llCardBalance.visibility = android.view.View.GONE binding.llUserNumber.visibility = android.view.View.GONE @@ -238,22 +253,26 @@ /** * 显示用户卡片信息(包含卡内数据和接口返回数据) */ private fun showUserCardInfo(cardInfo: CardInfoResult?, cardNumber: String, cardType: String, userCard: UserCard) { private fun showUserCardInfo( cardInfo: CardInfoResult?, cardNumber: String, cardType: String, userCard: UserCard ) { // 隐藏读卡提示,显示信息区域 binding.cardReadLL.visibility = android.view.View.GONE binding.cardInfoContainer.visibility = android.view.View.VISIBLE val cardTypeName = getCardTypeName(cardType) // 显示卡内数据 binding.tvCardNumber.text = cardNumber binding.tvCardType.text = cardTypeName // 显示用户卡特有字段 binding.llCardBalance.visibility = android.view.View.VISIBLE binding.llUserNumber.visibility = android.view.View.VISIBLE binding.llCardStatus.visibility = android.view.View.VISIBLE userCard.let { card -> // 余额转换为元(原始数据可能是分) val balanceInYuan = if (card.balance > 1000) { @@ -262,18 +281,19 @@ card.balance.toString() } binding.tvCardBalance.text = "${balanceInYuan}元" // 使用完整的用户编号 binding.tvUserNumber.text = card.getMyUserCode() binding.tvUserNumber.text = cardInfo?.cardNum // 卡片状态(假设正常状态,因为UserCard中没有状态字段) binding.tvCardStatus.text = "正常" binding.tvCardStatus.setTextColor(android.graphics.Color.parseColor("#4CAF50")) // 充值时间作为最后使用时间 if (card.rechargeDate != null) { binding.llLastUseTime.visibility = android.view.View.VISIBLE val dateFormat = java.text.SimpleDateFormat("yyyy-MM-dd HH:mm", java.util.Locale.getDefault()) val dateFormat = java.text.SimpleDateFormat("yyyy-MM-dd HH:mm", java.util.Locale.getDefault()) binding.tvLastUseTime.text = dateFormat.format(card.rechargeDate!!.time) } else { binding.llLastUseTime.visibility = android.view.View.GONE @@ -305,6 +325,7 @@ "1001" -> { "该卡片未在系统中注册,请先进行开卡操作。" } else -> { when { msg.isNullOrBlank() -> "获取卡信息失败,请重新刷卡重试。" generallibrary/src/main/java/com/dayu/general/activity/NewCard2Activity.kt
@@ -60,12 +60,12 @@ // 客户ID private var clientId: String = "" private lateinit var clientInfo : ClientInfo private lateinit var clientInfo: ClientInfo // 是否已读卡 private var isReadCard: Boolean = false private var orderId:String="" private var orderId: String = "" companion object { private const val TAG = "NewCard2Activity" @@ -335,7 +335,7 @@ object : SubscriberListener<BaseResponse<NewCardDataResult>>() { override fun onNext(response: BaseResponse<NewCardDataResult>) { if (response.success) { orderId=response.content?.orderNo.toString() orderId = response.content?.orderNo.toString() // 保存开卡信息到数据库 val cardRegistration = CardRegistrationBean( cardNumber = cardPhysicalId, @@ -362,16 +362,78 @@ putExtra("orderNumber", orderId) putExtra("cardAddr", cardPhysicalId) var userCard = UserCard() userCard.areaNumber = response.content?.cardNum?.substring(0, 12).toString() userCard.userCode =clientInfo.clientNum userCard.phoneNumber =clientInfo.phone userCard.userCodeNumber = response.content?.cardNum?.substring(12)?.toInt()!! userCard.areaNumber = response.content?.cardNum?.substring(0, 12).toString() userCard.userCode = clientInfo.clientNum userCard.phoneNumber = clientInfo.phone userCard.userCodeNumber = response.content?.cardNum?.substring(12)?.toInt()!! userCard.projectCode = response.content?.projectNo!! userCard.balance = MornyUtil.changeY2F(response.content?.balance) userCard.balance = MornyUtil.changeY2F(response.content?.balance) // userCard.surplusWater = response.content?.surplusWater?.toInt()!! userCard.waterPrice = response.content?.waterPrice?.toFloat()!! // userCard.electricPrice = response.content?.electricPrice?.toFloat()!! userCard.rechargeDate = DateUtils.parseStringToCalendar(response.content?.time) userCard.waterPrice = MornyUtil.changeY2F(response.content?.waterPrice) userCard.electricPrice = MornyUtil.changeY2F(response.content?.waterPrice) userCard.rechargeDate = DateUtils.parseStringToCalendar(response.content?.time) // 输出userCard的所有信息到日志 android.util.Log.d( "NewCard2Activity", "=== 开卡UserCard信息 ===" ) android.util.Log.d( "NewCard2Activity", "卡片类型: ${userCard.cardType}" ) android.util.Log.d( "NewCard2Activity", "国家行政区域号: ${userCard.areaNumber}" ) android.util.Log.d( "NewCard2Activity", "用户编号: ${userCard.userCode}" ) android.util.Log.d( "NewCard2Activity", "用户卡编号: ${userCard.userCodeNumber}" ) android.util.Log.d( "NewCard2Activity", "完整用户编号: ${userCard.getMyUserCode()}" ) android.util.Log.d( "NewCard2Activity", "手机号: ${userCard.phoneNumber}" ) android.util.Log.d( "NewCard2Activity", "项目编码: ${userCard.projectCode}" ) android.util.Log.d( "NewCard2Activity", "卡内余额: ${userCard.balance}" ) android.util.Log.d( "NewCard2Activity", "剩余水量: ${userCard.surplusWater}" ) android.util.Log.d( "NewCard2Activity", "水量单价: ${userCard.waterPrice}" ) android.util.Log.d( "NewCard2Activity", "电量单价: ${userCard.electricPrice}" ) android.util.Log.d( "NewCard2Activity", "充值时间: ${userCard.rechargeDate}" ) android.util.Log.d("NewCard2Activity", "==================") putExtra("userCard", userCard) putExtra("operationTypeCode", CardOperationType.OpenCard.code) putExtra("cardFee", cardFee) generallibrary/src/main/java/com/dayu/general/activity/NfcWreatActivity.kt
@@ -5,6 +5,7 @@ import androidx.lifecycle.lifecycleScope import com.dayu.baselibrary.net.subscribers.SubscriberListener import com.dayu.baselibrary.tools.nfc.NFCCallBack import com.dayu.baselibrary.utils.MornyUtil import com.dayu.baselibrary.utils.ToastUtil import com.dayu.general.bean.card.ClearCard import com.dayu.general.bean.card.UserCard @@ -30,7 +31,7 @@ var cardType = "" var cardAddr = "" var cardFee = 0 // 充值相关金额 private var rechargeAmount = 0.0 private var bonusAmount = 0.0 @@ -57,11 +58,11 @@ operationTypeCode = intent?.getIntExtra("operationTypeCode", -1) ?: -1 orderNumber = intent?.getStringExtra("orderNumber") ?: "" operationType = CardOperationType.fromCode(operationTypeCode) // 获取充值相关金额 rechargeAmount = intent?.getDoubleExtra("rechargeAmount", 0.0) ?: 0.0 bonusAmount = intent?.getDoubleExtra("bonusAmount", 0.0) ?: 0.0 if (intent?.hasExtra("cardFee") == true) { cardFee = intent?.getIntExtra("cardFee", 0) ?: 0 } @@ -86,7 +87,7 @@ textData.append("工本费:" + cardFee + "元\n") } if (userCard.balance != 0) { textData.append("充值金额:" + userCard.balance + "元") textData.append("充值金额:" + MornyUtil.changeF2Y(userCard.balance) + "元") } binding?.cardData?.text = textData.toString() @@ -95,23 +96,33 @@ CardOperationType.Recharge -> { var textData = StringBuilder() textData.append("用户充值\n") // 显示充值金额 if (rechargeAmount > 0) { textData.append("充值金额:" + String.format("%.2f", rechargeAmount) + "元\n") textData.append( "充值金额:" + String.format( "%.2f", rechargeAmount ) + "元\n" ) } // 显示赠送金额 if (bonusAmount > 0) { textData.append("赠送金额:" + String.format("%.2f", bonusAmount) + "元\n") } // 显示总金额(写入卡内的总余额) if (userCard.balance != 0) { val totalBalanceInYuan = userCard.balance / 100.0 // 转换为元 textData.append("卡内总余额:" + String.format("%.2f", totalBalanceInYuan) + "元") textData.append( "卡内总余额:" + String.format( "%.2f", totalBalanceInYuan ) + "元" ) } binding?.cardData?.text = textData.toString() } @@ -130,7 +141,7 @@ val nfcReadHelper = NfcReadHelper.getInstance(intent, this) // 使用正常的getCardNumber()方法,它会自动关闭连接 val cardNumber = nfcReadHelper.getCardNumber() if (cardNumber.isNotEmpty() && cardNumber == cardAddr) { val nfcWreatHelper = NfcWreatHelper.getInstance(intent, this) when (operationType) { @@ -210,7 +221,7 @@ val updatedCardRegistration = cardRegistration.copy(isCardWritten = true) // 更新数据库记录 cardRegistrationDao.update(updatedCardRegistration) // 在主线程中关闭Activity runOnUiThread { setResult(RESULT_OK) generallibrary/src/main/java/com/dayu/general/activity/RechargeDetailActivity.kt
@@ -12,6 +12,7 @@ import android.widget.Toast import androidx.appcompat.app.AppCompatActivity import com.dayu.baselibrary.net.subscribers.SubscriberListener import com.dayu.baselibrary.utils.MornyUtil import com.dayu.baselibrary.utils.ToastUtil import com.dayu.baselibrary.view.TitleBar import com.dayu.general.BaseApplication @@ -45,7 +46,12 @@ private const val EXTRA_CARD_ADDRESS = "extra_card_address" private const val EXTRA_USER_CARD = "extra_user_card" fun start(context: Context, cardInfo: CardInfoResult?, cardAddress: String?, userCard: UserCard?) { fun start( context: Context, cardInfo: CardInfoResult?, cardAddress: String?, userCard: UserCard? ) { val intent = Intent(context, RechargeDetailActivity::class.java) intent.putExtra(EXTRA_CARD_INFO, cardInfo) intent.putExtra(EXTRA_CARD_ADDRESS, cardAddress) @@ -86,7 +92,7 @@ // 处理充值逻辑 handleRecharge() } // 设置金额输入限制 setupAmountInputLimit(binding.rechargeMorny) setupAmountInputLimit(binding.rechargeWater) @@ -98,13 +104,13 @@ private fun setupAmountInputLimit(editText: EditText) { editText.addTextChangedListener(object : TextWatcher { override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {} override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {} override fun afterTextChanged(s: Editable?) { val text = s.toString() if (text.isEmpty()) return // 检查是否包含小数点 if (text.contains(".")) { val parts = text.split(".") @@ -120,7 +126,7 @@ } } } // 防止输入多个小数点 val dotCount = text.count { it == '.' } if (dotCount > 1) { @@ -130,7 +136,7 @@ editText.setSelection(newText.length) editText.addTextChangedListener(this) } // 防止以小数点开头 if (text.startsWith(".")) { editText.removeTextChangedListener(this) @@ -249,9 +255,9 @@ binding.redInitCode.text = cardAddress ?: "" binding.userName.text = info.userName ?: "" binding.redCardNum.text = info.cardNum ?: "" // 使用用户卡中的余额显示 val balance = userCard?.let { val balance = userCard?.let { // 将分转换为元,保留两位小数 String.format("%.2f", it.balance / 100.0) } ?: run { @@ -389,25 +395,30 @@ /** * 启动写卡界面 */ private fun startWriteCardActivity(rechargeResult: RechargeResult, rechargeAmount: Double, bonusAmount: Double) { private fun startWriteCardActivity( rechargeResult: RechargeResult, rechargeAmount: Double, bonusAmount: Double ) { try { // 创建UserCard对象用于写卡 val userCard = UserCard().apply { // 设置用户卡信息 cardInfo?.let { info -> userCode = info.cardNum ?: "" // 计算新余额:原有余额 + 充值金额 + 赠送金额 val originalBalance = this@RechargeDetailActivity.userCard?.balance ?: 0 // 原有余额(分) val originalBalance = this@RechargeDetailActivity.userCard?.balance ?: 0 // 原有余额(分) val rechargeAmountInCents = (rechargeAmount * 100).toInt() // 充值金额转分 val bonusAmountInCents = (bonusAmount * 100).toInt() // 赠送金额转分 balance = originalBalance + rechargeAmountInCents + bonusAmountInCents } // 设置其他必要信息 projectCode = rechargeResult.projectNo waterPrice = rechargeResult.waterPrice.toFloat() waterPrice = MornyUtil.changeY2F(rechargeResult.waterPrice.toString()) rechargeDate = java.util.Calendar.getInstance() } generallibrary/src/main/java/com/dayu/general/bean/card/UserCard.kt
@@ -17,10 +17,10 @@ var userCodeNumber: Int = 0 // 用户卡编号(HEX) var phoneNumber: String = "" // 手机号(BCD) var projectCode: Int = 0 // 项目编码(HEX 1-255) var balance: Int = 0 // 剩余金额(2位小数点,单位元) var balance: Int = 0 // 剩余金额(2位小数点,单位分) var surplusWater: Int = 0 // 剩余水量(2位小数点,单位立方米) var waterPrice: Float = 0f // 水量单价(最大655.35,2位小数点。单位:m3/元) var electricPrice: Float = 0f // 电量单价(最大655.35,2位小数点。单位: 元/度) var waterPrice: Int = 0 // 水量单价(2位小数点,单位分/m3) var electricPrice: Int = 0 // 电量单价(2位小数点,单位分/度) var rechargeDate: Calendar? = null // 充值时间 /** @@ -74,7 +74,7 @@ projectCode = HexUtil.get16To10LowHightByBytes(byteArrayOf(one[0])) balance = HexUtil.get16To10LowHightByBytes(one.copyOfRange(1, 5)) surplusWater = HexUtil.get16To10LowHightByBytes(one.copyOfRange(5, 9)) electricPrice = HexUtil.hexToFloatLowHigh(one.copyOfRange(9, 11)) electricPrice = HexUtil.get16To10LowHightByBytes(one.copyOfRange(9, 11)) // 解析充值时间 val year = HexUtil.getBcdToInt(one[11]) @@ -90,7 +90,7 @@ // 解析第2块 val two = data[2] userCard.apply { waterPrice = HexUtil.hexToFloatLowHigh(two.copyOfRange(9, 11)) waterPrice = HexUtil.get16To10LowHightByBytes(two.copyOfRange(9, 11)) } return userCard @@ -157,10 +157,11 @@ System.arraycopy(waterPadded, 0, data, 5, 4) // 设置电价 - 修复:确保数组长度正确 val priceBytes = HexUtil.hexToByteArray(HexUtil.floatToHexLowHigh(electricPrice)) val pricePadded = ByteArray(2) System.arraycopy(priceBytes, 0, pricePadded, 0, minOf(priceBytes.size, 2)) System.arraycopy(pricePadded, 0, data, 9, 2) val electricPriceHex = HexUtil.get10To16LowHigh(electricPrice) val electricPriceBytes = HexUtil.hexToByteArray(electricPriceHex) val electricPricePadded = ByteArray(2) System.arraycopy(electricPriceBytes, 0, electricPricePadded, 0, minOf(electricPriceBytes.size, 2)) System.arraycopy(electricPricePadded, 0, data, 9, 2) // 设置充值时间 rechargeDate?.let { @@ -196,10 +197,11 @@ System.arraycopy(waterPadded, 0, data, 5, 4) // 设置水价 - 修复:确保数组长度正确 val priceBytes = HexUtil.hexToByteArray(HexUtil.floatToHexLowHigh(waterPrice)) val pricePadded = ByteArray(2) System.arraycopy(priceBytes, 0, pricePadded, 0, minOf(priceBytes.size, 2)) System.arraycopy(pricePadded, 0, data, 9, 2) val waterPriceHex = HexUtil.get10To16LowHigh(waterPrice) val waterPriceBytes = HexUtil.hexToByteArray(waterPriceHex) val waterPricePadded = ByteArray(2) System.arraycopy(waterPriceBytes, 0, waterPricePadded, 0, minOf(waterPriceBytes.size, 2)) System.arraycopy(waterPricePadded, 0, data, 9, 2) // 设置充值时间 rechargeDate?.let { generallibrary/src/main/res/layout/activity_card_read.xml
@@ -11,7 +11,8 @@ android:layout_height="@dimen/dimen_title_height" android:background="@color/title_bar_bg" android:elevation="4dp" app:centerText="读卡" /> app:centerText="读卡" app:leftImage="@mipmap/icon_back" /> <ScrollView android:layout_width="match_parent" @@ -32,7 +33,7 @@ android:layout_height="match_parent" android:gravity="center" android:orientation="vertical" android:visibility="gone"> android:visibility="visible"> <androidx.cardview.widget.CardView android:layout_width="match_parent" @@ -95,7 +96,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" android:visibility="visible"> android:visibility="gone"> <!-- 卡内数据区域 --> <androidx.cardview.widget.CardView @@ -116,9 +117,9 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginBottom="2dp" android:orientation="horizontal" android:gravity="center_vertical" android:background="#F8F9FA" android:gravity="center_vertical" android:orientation="horizontal" android:padding="12dp"> <TextView @@ -143,15 +144,15 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginBottom="2dp" android:orientation="horizontal" android:gravity="center_vertical" android:background="#FFFFFF" android:gravity="center_vertical" android:orientation="horizontal" android:padding="12dp"> <TextView android:layout_width="105dp" android:layout_height="wrap_content" android:text="卡号:" android:text="卡地址:" android:textColor="#333333" android:textSize="@dimen/text_size" /> @@ -164,15 +165,42 @@ android:textColor="#666666" android:textSize="@dimen/text_size" /> </LinearLayout> <!-- 卡片状态 --> <LinearLayout android:id="@+id/ll_card_status" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginBottom="2dp" android:background="#FFFFFF" android:gravity="center_vertical" android:orientation="horizontal" android:padding="12dp" android:visibility="visible"> <TextView android:layout_width="105dp" android:layout_height="wrap_content" android:text="卡片状态:" android:textColor="#333333" android:textSize="@dimen/text_size" /> <TextView android:id="@+id/tv_card_status" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="正常" android:textColor="#4CAF50" android:textSize="@dimen/text_size" /> </LinearLayout> <!-- 卡片类型 --> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginBottom="2dp" android:orientation="horizontal" android:gravity="center_vertical" android:background="#F8F9FA" android:gravity="center_vertical" android:orientation="horizontal" android:padding="12dp"> <TextView @@ -198,11 +226,11 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginBottom="2dp" android:orientation="horizontal" android:visibility="visible" android:gravity="center_vertical" android:background="#FFFFFF" android:padding="12dp"> android:gravity="center_vertical" android:orientation="horizontal" android:padding="12dp" android:visibility="visible"> <TextView android:layout_width="105dp" @@ -228,11 +256,11 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginBottom="2dp" android:orientation="horizontal" android:visibility="visible" android:gravity="center_vertical" android:background="#F8F9FA" android:padding="12dp"> android:gravity="center_vertical" android:orientation="horizontal" android:padding="12dp" android:visibility="visible"> <TextView android:layout_width="105dp" @@ -256,9 +284,9 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginBottom="2dp" android:orientation="horizontal" android:gravity="center_vertical" android:background="#FFFFFF" android:gravity="center_vertical" android:orientation="horizontal" android:padding="12dp"> <TextView @@ -283,9 +311,9 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginBottom="2dp" android:orientation="horizontal" android:gravity="center_vertical" android:background="#F8F9FA" android:gravity="center_vertical" android:orientation="horizontal" android:padding="12dp"> <TextView @@ -305,34 +333,6 @@ android:textSize="@dimen/text_size" /> </LinearLayout> <!-- 卡片状态 --> <LinearLayout android:id="@+id/ll_card_status" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginBottom="2dp" android:orientation="horizontal" android:visibility="visible" android:gravity="center_vertical" android:background="#FFFFFF" android:padding="12dp"> <TextView android:layout_width="105dp" android:layout_height="wrap_content" android:text="卡片状态:" android:textColor="#333333" android:textSize="@dimen/text_size" /> <TextView android:id="@+id/tv_card_status" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="正常" android:textColor="#4CAF50" android:textSize="@dimen/text_size" /> </LinearLayout> <!-- 最后使用时间 --> <LinearLayout @@ -340,11 +340,11 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginBottom="2dp" android:orientation="horizontal" android:visibility="visible" android:gravity="center_vertical" android:background="#F8F9FA" android:padding="12dp"> android:gravity="center_vertical" android:orientation="horizontal" android:padding="12dp" android:visibility="visible"> <TextView android:layout_width="105dp"