generallibrary/src/main/AndroidManifest.xml
@@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:tools="http://schemas.android.com/tools" xmlns:android="http://schemas.android.com/apk/res/android"> <manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools"> <uses-permission android:name="android.permission.NFC" /> <!--用于访问网络,网络定位需要上网--> @@ -49,18 +49,18 @@ <!-- </activity>--> <activity android:name="com.dayu.general.activity.NewCardActivity" /> <activity android:name="com.dayu.general.activity.ManageListActivity" /> <activity android:name="com.dayu.general.activity.SearchUserListActivity"/> <activity android:name="com.dayu.general.activity.NfcWreatActivity" <activity android:name="com.dayu.general.activity.SearchUserListActivity" /> <activity android:name="com.dayu.general.activity.NfcWreatActivity" android:exported="false" android:launchMode="singleTop" > android:launchMode="singleTop"> <intent-filter> <action android:name="android.nfc.action.ACTION_NDEF_DISCOVERED" /> <category android:name="android.intent.category.DEFAULT" /> <data android:mimeType="text/plain" /> </intent-filter> </activity> <activity android:name=".activity.MainActivity"/> <activity android:name=".activity.MainActivity" /> <activity android:name=".activity.ManagerReadActivity" android:exported="false" @@ -71,8 +71,17 @@ <data android:mimeType="text/plain" /> </intent-filter> </activity> <activity android:name=".activity.SearchCardListActivity"/> <activity android:name=".activity.SearchCardListActivity" /> <activity android:name=".activity.NewCard2Activity" android:exported="false" android:launchMode="singleTop"> <intent-filter> <action android:name="android.nfc.action.ACTION_NDEF_DISCOVERED" /> <category android:name="android.intent.category.DEFAULT" /> <data android:mimeType="text/plain" /> </intent-filter> </activity> <meta-data generallibrary/src/main/java/com/dayu/general/activity/NewCard2Activity.kt
New file @@ -0,0 +1,224 @@ package com.dayu.general.activity import android.content.Intent import android.os.Bundle import android.text.Editable import android.text.TextWatcher import android.view.View import android.widget.Toast import com.dayu.baselibrary.net.subscribers.SubscriberListener import com.dayu.baselibrary.view.TitleBar.ClickType_LEFT_IMAGE import com.dayu.general.BaseApplication import com.dayu.general.R import com.dayu.general.databinding.ActivityNewCard1GeBinding import com.dayu.general.net.ApiManager import com.dayu.general.net.BaseResponse import com.dayu.general.tool.NfcReadHelper /** * Description: 用户开卡界面 * Author: zuo * Date: 2025/4/7 */ class NewCard2Activity : BaseNfcActivity() { private lateinit var binding: ActivityNewCard1GeBinding // 支付方式 private var paymentMethod: String = "现金" // 卡物理ID private var cardPhysicalId: String = "" // 用户ID private var userId: String = "" companion object { private const val TAG = "NewCard2Activity" } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding = ActivityNewCard1GeBinding.inflate(layoutInflater) setContentView(binding.root) initView() initListener() } private fun initView() { // 初始化标题栏返回按钮 binding.titleBar.setOnItemclickListner(ClickType_LEFT_IMAGE) { finish() } // 初始化NFC读卡容器,初始隐藏 binding.nfcContainer.visibility = View.VISIBLE // 从Intent中获取用户信息(如果有) val userName = intent.getStringExtra("userName") ?: "" val rawIdCard = intent.getStringExtra("idCard") val idCard = if (rawIdCard.isNullOrBlank()) "无" else rawIdCard val farmerCode = intent.getStringExtra("farmerCode") ?: "" userId = intent.getStringExtra("userId") ?: "" // 设置用户信息 binding.newCardUserName.text = userName binding.newCardIdCard.text = idCard binding.newCardFarmerCode.text = farmerCode // 设置金额输入限制为两位小数 binding.newCardRechargeAmount.addTextChangedListener(createDecimalTextWatcher()) binding.newCardCardFee.addTextChangedListener(createDecimalTextWatcher()) } /** * 创建限制输入两位小数的TextWatcher */ private fun createDecimalTextWatcher(): TextWatcher { return 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?) { if (s == null || s.isEmpty()) return val str = s.toString() // 如果输入的不是有效的小数格式,进行处理 if (str.contains(".")) { val decimalIndex = str.indexOf(".") // 如果小数点后超过两位,截取到两位 if (decimalIndex >= 0 && str.length - decimalIndex > 3) { s.delete(decimalIndex + 3, str.length) } } } } } private fun initListener() { // 设置支付方式选择监听 binding.newCardPaymentMethod.setOnCheckedChangeListener { group, checkedId -> paymentMethod = when (checkedId) { R.id.newCard_cashPayment -> "现金" R.id.newCard_posPayment -> "POS机" R.id.newCard_bankTransfer -> "银行转账" else -> "现金" } } // 设置开卡按钮点击监听 binding.newCardRegistBtn.setOnClickListener { if (cardPhysicalId.isEmpty()) { // 如果尚未读取到卡物理ID,显示NFC读卡界面 binding.nfcContainer.visibility = View.VISIBLE } else { // 已读取到卡物理ID,进行开卡操作 registerNewCard() } } } private fun registerNewCard() { // 获取充值金额 val rechargeAmountStr = binding.newCardRechargeAmount.text.toString() val rechargeAmount = if (rechargeAmountStr.isEmpty()) 0.0 else rechargeAmountStr.toDouble() // 获取工本费 val cardFeeStr = binding.newCardCardFee.text.toString() val cardFee = if (cardFeeStr.isEmpty()) 0.0 else cardFeeStr.toDouble() // 格式化金额为两位小数 val formattedRechargeAmount = String.format("%.2f", rechargeAmount) val formattedCardFee = String.format("%.2f", cardFee) // 获取支付方式ID val paymentId = when (paymentMethod) { "现金" -> 1 "POS机" -> 2 "银行转账" -> 3 else -> 1 } val remark = binding.newCardRemark.text.toString() // 构建请求参数 val params = HashMap<String, Any>() params["cardAddr"] = cardPhysicalId // 水卡地址(物理ID) params["clientNum"] = binding.newCardFarmerCode.text.toString() // 农户编号 params["cardCost"] = (cardFee * 100).toInt() // 购卡金额(工本费)转为分 params["amount"] = (rechargeAmount * 100).toInt() // 充值金额转为分 params["paymentId"] = paymentId // 支付方式 params["remarks"] = remark // 备注 params["operator"] = BaseApplication.userId // 操作人ID // 执行卡片激活API请求 ApiManager.getInstance().requestPostLoading( this, "sell/card/active", String::class.java, params, object : SubscriberListener<BaseResponse<String>>() { override fun onNext(response: BaseResponse<String>) { if (response.success) { // 激活成功 Toast.makeText(this@NewCard2Activity, "开卡成功", Toast.LENGTH_SHORT).show() setResult(RESULT_OK) finish() } else { // 激活失败 Toast.makeText( this@NewCard2Activity, "开卡失败: ${response.msg}", Toast.LENGTH_SHORT ).show() } } override fun onError(e: Throwable?) { super.onError(e) // 请求异常 Toast.makeText( this@NewCard2Activity, "开卡失败: ${e?.message ?: "网络异常"}", Toast.LENGTH_SHORT ).show() } } ) } override fun onResume() { super.onResume() // 开启前台调度系统,优先处理NFC标签 } override fun onPause() { super.onPause() // 关闭前台调度系统 } override fun onNfcBack(intent: Intent) { var cardNumber = NfcReadHelper.getInstance(intent, this).getCardNumber() if (!cardNumber.isEmpty()) { // 保存卡物理ID cardPhysicalId = cardNumber // 更新UI binding.newCardArerNumber.text = cardNumber // 隐藏NFC读卡界面 binding.nfcContainer.visibility = View.GONE Toast.makeText(this, "读卡成功", Toast.LENGTH_SHORT).show() } } } generallibrary/src/main/java/com/dayu/general/activity/SearchUserListActivity.kt
@@ -1,5 +1,6 @@ package com.dayu.general.activity import android.content.Intent import android.os.Bundle import androidx.recyclerview.widget.LinearLayoutManager import com.dayu.baselibrary.net.subscribers.SubscriberListener @@ -25,12 +26,12 @@ var binding: ActivitySearchUserGeBinding? = null private var userAdapter: SearchUserListAdapter? = null var searchDialog: SearchDialog? = null // 分页相关变量 private var currentPage = 1 private val pageSize = 20 private var hasMoreData = true // 保存当前搜索条件 private var currentFarmerId = "" private var currentFarmerName = "" @@ -57,11 +58,11 @@ currentFarmerId = farmerId currentFarmerName = farmerName currentCardNumber = cardNumber // 重置分页状态 currentPage = 1 hasMoreData = true // 执行搜索 searchUser(farmerId, farmerName, cardNumber, true) } @@ -79,20 +80,22 @@ layoutManager = LinearLayoutManager(this@SearchUserListActivity) adapter = userAdapter } // 设置列表项点击事件 userAdapter?.setOnItemClickListener { user -> // 处理用户点击事件 ToastUtil.show("已选择用户:${user.name}") // 这里可以添加跳转到用户详情页面的逻辑 // val intent = Intent(this, UserDetailActivity::class.java) // intent.putExtra("userId", user.id) // startActivity(intent) // 传递用户信息到开卡界面 val intent = Intent(this, NewCard2Activity::class.java) intent.putExtra("userName", user.name) intent.putExtra("idCard", user.idCard) intent.putExtra("farmerCode", user.clientNum) intent.putExtra("userId", user.id) startActivity(intent) } } private fun setupRefreshLayout() { binding?.refreshLayout?.apply { // 设置刷新和加载更多监听器 @@ -103,7 +106,7 @@ hasMoreData = true searchUser(currentFarmerId, currentFarmerName, currentCardNumber, true) } override fun onLoadMore(refreshLayout: RefreshLayout) { // 如果还有更多数据,加载下一页 if (hasMoreData) { @@ -130,7 +133,12 @@ * @param cardNumber 银行卡号 * @param isRefresh 是否为刷新操作 */ private fun searchUser(farmerId: String, farmerName: String, cardNumber: String, isRefresh: Boolean = true) { private fun searchUser( farmerId: String, farmerName: String, cardNumber: String, isRefresh: Boolean = true ) { val map = mutableMapOf<String, Any>() if (farmerId.isNotEmpty()) { @@ -144,7 +152,7 @@ if (cardNumber.isNotEmpty()) { map["cardNum"] = cardNumber } // 添加分页参数 map["pageCurr"] = currentPage map["pageSize"] = pageSize @@ -159,7 +167,7 @@ override fun onNext(t: BaseResponse<SearchUserResult>) { // 完成刷新或加载动作 finishRefreshOrLoad(isRefresh) if (t.success) { // 处理搜索成功的情况 val result = t.content @@ -172,7 +180,7 @@ } else { userAdapter?.addData(result.obj) } // 判断是否还有更多数据:根据当前页码和总页数判断 hasMoreData = currentPage < result.pageTotal } else { @@ -205,7 +213,7 @@ } ) } /** * 完成刷新或加载操作 * @param isRefresh 是否为刷新操作 generallibrary/src/main/java/com/dayu/general/bean/net/SearchUserResult.kt
@@ -1,5 +1,7 @@ package com.dayu.general.bean.net import android.os.Parcelable /** * Description: 搜索用户结果Bean * Author: zuo @@ -15,7 +17,7 @@ /** * 用户信息 */ data class UserInfo( data class UserInfo ( val address: String? = null, // 地址 val cardCount: Int? = null, // 卡数量 val clientNum: String? = null, // 客户编号 generallibrary/src/main/res/drawable/radio_checked.xml
New file @@ -0,0 +1,12 @@ <?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item> <shape android:shape="rectangle"> <solid android:color="#E6F2FF" /> <corners android:radius="4dp" /> <stroke android:color="#4285F4" android:width="1dp" /> </shape> </item> </layer-list> generallibrary/src/main/res/drawable/radio_selector.xml
New file @@ -0,0 +1,5 @@ <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@drawable/radio_checked" android:state_checked="true" /> <item android:drawable="@drawable/radio_unchecked" android:state_checked="false" /> </selector> generallibrary/src/main/res/drawable/radio_unchecked.xml
New file @@ -0,0 +1,7 @@ <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <solid android:color="#FFFFFF" /> <corners android:radius="4dp" /> <stroke android:color="#DDDDDD" android:width="1dp" /> </shape> generallibrary/src/main/res/layout/activity_card_list.xml
@@ -39,6 +39,7 @@ android:paddingTop="8dp" android:paddingBottom="8dp" android:clipToPadding="false" android:background="@color/base_list_bg" android:overScrollMode="never" /> <com.scwang.smart.refresh.footer.ClassicsFooter generallibrary/src/main/res/layout/activity_new_card_1_ge.xml
@@ -1,9 +1,11 @@ <?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" xmlns:app="http://schemas.android.com/apk/res-auto"> android:background="#F5F7FA"> <com.dayu.baselibrary.view.TitleBar android:id="@+id/titleBar" android:layout_width="match_parent" @@ -14,7 +16,6 @@ app:leftImage="@mipmap/icon_back" tools:ignore="MissingConstraints" /> <androidx.cardview.widget.CardView android:id="@+id/nfcContainer" android:layout_width="match_parent" @@ -23,6 +24,7 @@ android:layout_marginTop="24dp" android:layout_marginEnd="16dp" android:layout_marginBottom="24dp" android:visibility="gone" app:cardBackgroundColor="@android:color/white" app:cardCornerRadius="12dp" app:cardElevation="4dp" @@ -43,8 +45,17 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" android:text="请将新卡贴在设备上进行写卡" android:text="请将新卡贴在设备上进行读卡" android:textColor="#333333" android:textSize="18sp" android:textStyle="bold" /> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" android:text="(将获取物理卡卡号)" android:textColor="#999999" android:textSize="18sp" android:textStyle="bold" /> @@ -61,12 +72,352 @@ android:layout_height="wrap_content" android:layout_marginTop="16dp" android:gravity="center" android:text="请保持手机和卡片不要移动" android:text="请保持手持机和卡片不要移动" android:textColor="#666666" android:textSize="14sp" /> </LinearLayout> </androidx.cardview.widget.CardView> <ScrollView android:layout_width="match_parent" android:layout_height="0dp" android:fillViewport="true" android:scrollbars="none" android:visibility="gone" app:layout_constraintBottom_toTopOf="@+id/newCard_registBtn" app:layout_constraintTop_toBottomOf="@+id/titleBar"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" android:padding="16dp"> <androidx.cardview.widget.CardView android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginBottom="16dp" app:cardCornerRadius="8dp" app:cardElevation="2dp"> <LinearLayout android:id="@+id/center_data" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" android:padding="16dp"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginBottom="16dp" android:text="基本信息" android:textColor="#333333" android:textSize="18sp" android:textStyle="bold" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginBottom="12dp" android:gravity="center_vertical" android:orientation="horizontal"> <TextView android:layout_width="120dp" android:layout_height="wrap_content" android:text="卡号:" android:textColor="#666666" android:textSize="@dimen/new_card_size" /> <TextView android:id="@+id/newCard_arerNumber" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginStart="8dp" android:textColor="#333333" android:textSize="@dimen/new_card_size" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginBottom="12dp" android:gravity="center_vertical" android:orientation="horizontal"> <TextView android:layout_width="120dp" android:layout_height="wrap_content" android:text="姓名:" android:textColor="#666666" android:textSize="@dimen/new_card_size" /> <TextView android:id="@+id/newCard_userName" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginStart="8dp" android:textColor="#333333" android:textSize="@dimen/new_card_size" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginBottom="12dp" android:gravity="center_vertical" android:orientation="horizontal"> <TextView android:layout_width="120dp" android:layout_height="wrap_content" android:text="身份证号:" android:textColor="#666666" android:textSize="@dimen/new_card_size" /> <TextView android:id="@+id/newCard_idCard" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginStart="8dp" android:textColor="#333333" android:textSize="@dimen/new_card_size" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginBottom="12dp" android:gravity="center_vertical" android:orientation="horizontal"> <TextView android:layout_width="120dp" android:layout_height="wrap_content" android:text="农户编号:" android:textColor="#666666" android:textSize="@dimen/new_card_size" /> <TextView android:id="@+id/newCard_farmerCode" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginStart="8dp" android:textColor="#333333" android:textSize="@dimen/new_card_size" /> </LinearLayout> </LinearLayout> </androidx.cardview.widget.CardView> <androidx.cardview.widget.CardView android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginBottom="16dp" app:cardCornerRadius="8dp" app:cardElevation="2dp"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" android:padding="16dp"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginBottom="16dp" android:text="费用信息" android:textColor="#333333" android:textSize="18sp" android:textStyle="bold" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginBottom="12dp" android:gravity="center_vertical" android:orientation="horizontal"> <TextView android:layout_width="120dp" android:layout_height="wrap_content" android:text="工本费:" android:textColor="#666666" android:textSize="@dimen/new_card_size" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:background="#FFFFFF" android:orientation="vertical"> <EditText android:id="@+id/newCard_rechargeAmount" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@null" android:hint="请输入工本费(选填)" android:inputType="numberDecimal" android:padding="12dp" android:textColor="#333333" android:textSize="@dimen/new_card_size" /> </LinearLayout> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginBottom="12dp" android:gravity="center_vertical" android:orientation="horizontal"> <TextView android:layout_width="120dp" android:layout_height="wrap_content" android:text="充值金额:" android:textColor="#666666" android:textSize="@dimen/new_card_size" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:background="#FFFFFF" android:orientation="vertical"> <EditText android:id="@+id/newCard_cardFee" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@null" android:hint="请输入充值金额(选填)" android:inputType="numberDecimal" android:padding="12dp" android:textColor="#333333" android:textSize="@dimen/new_card_size" /> </LinearLayout> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginBottom="12dp" android:gravity="center_vertical" android:orientation="horizontal"> <TextView android:layout_width="120dp" android:layout_height="wrap_content" android:text="备注:" android:textColor="#666666" android:textSize="@dimen/new_card_size" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:background="#FFFFFF" android:orientation="vertical"> <EditText android:id="@+id/newCard_remark" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@null" android:hint="请输入备注(选填)" android:padding="12dp" android:textColor="#333333" android:textSize="@dimen/new_card_size" /> </LinearLayout> </LinearLayout> </LinearLayout> </androidx.cardview.widget.CardView> <androidx.cardview.widget.CardView android:layout_width="match_parent" android:layout_height="wrap_content" app:cardCornerRadius="8dp" app:cardElevation="2dp"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" android:padding="16dp"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginBottom="16dp" android:text="支付方式" android:textColor="#333333" android:textSize="18sp" android:textStyle="bold" /> <RadioGroup android:id="@+id/newCard_paymentMethod" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <RadioButton android:id="@+id/newCard_cashPayment" android:layout_width="0dp" android:layout_height="40dp" android:layout_marginRight="15dp" android:layout_weight="1" android:background="@drawable/radio_selector" android:button="@null" android:checked="true" android:gravity="center" android:text="现金" android:textColor="@color/radio_button_text_color" android:textSize="@dimen/new_card_size" /> <RadioButton android:id="@+id/newCard_posPayment" android:layout_width="0dp" android:layout_height="40dp" android:layout_marginRight="15dp" android:layout_weight="1" android:background="@drawable/radio_selector" android:button="@null" android:gravity="center" android:text="POS机" android:textColor="@color/radio_button_text_color" android:textSize="@dimen/new_card_size" /> <RadioButton android:id="@+id/newCard_bankTransfer" android:layout_width="0dp" android:layout_height="40dp" android:layout_weight="1" android:background="@drawable/radio_selector" android:button="@null" android:gravity="center" android:text="银行转账" android:textColor="@color/radio_button_text_color" android:textSize="@dimen/new_card_size" /> </RadioGroup> </LinearLayout> </androidx.cardview.widget.CardView> </LinearLayout> </ScrollView> <TextView android:id="@+id/newCard_registBtn" android:layout_width="match_parent" android:layout_height="56dp" android:layout_margin="16dp" android:background="#4285F4" android:visibility="gone" android:gravity="center" android:text="确认开卡" android:textColor="#FFFFFF" android:textSize="16sp" app:layout_constraintBottom_toBottomOf="parent" /> </androidx.constraintlayout.widget.ConstraintLayout> generallibrary/src/main/res/layout/dialog_search_card_ge.xml
New file @@ -0,0 +1,142 @@ <?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@drawable/search_dialog_bg" android:padding="20dp"> <TextView android:id="@+id/tv_title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="卡片搜索" android:textColor="@color/black" android:textSize="20sp" android:textStyle="bold" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintTop_toTopOf="parent" /> <View android:id="@+id/divider" android:layout_width="match_parent" android:layout_height="1dp" android:layout_marginTop="12dp" android:background="#E0E0E0" app:layout_constraintTop_toBottomOf="@id/tv_title" /> <TextView android:id="@+id/tv_card_number_label" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="16dp" android:text="卡号" android:textColor="#666666" android:textSize="14sp" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintTop_toBottomOf="@id/divider" /> <EditText android:id="@+id/et_card_number" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="6dp" android:background="@drawable/edit_text_bg" android:hint="请输入卡号" android:inputType="text" android:singleLine="true" android:textColorHint="#BBBBBB" android:textSize="15sp" app:layout_constraintTop_toBottomOf="@id/tv_card_number_label" /> <TextView android:id="@+id/tv_client_number_label" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="14dp" android:text="客户编号" android:textColor="#666666" android:textSize="14sp" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintTop_toBottomOf="@id/et_card_number" /> <EditText android:id="@+id/et_client_number" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="6dp" android:background="@drawable/edit_text_bg" android:hint="请输入客户编号" android:inputType="text" android:singleLine="true" android:textColorHint="#BBBBBB" android:textSize="15sp" app:layout_constraintTop_toBottomOf="@id/tv_client_number_label" /> <TextView android:id="@+id/tv_client_name_label" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="14dp" android:text="客户姓名" android:textColor="#666666" android:textSize="14sp" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintTop_toBottomOf="@id/et_client_number" /> <EditText android:id="@+id/et_client_name" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="6dp" android:background="@drawable/edit_text_bg" android:hint="请输入客户姓名" android:inputType="text" android:singleLine="true" android:textColorHint="#BBBBBB" android:textSize="15sp" app:layout_constraintTop_toBottomOf="@id/tv_client_name_label" /> <Button android:id="@+id/tv_cancel" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginTop="24dp" android:layout_marginEnd="6dp" android:background="@drawable/cancel_button_ripple" android:clickable="true" android:focusable="true" android:paddingTop="10dp" android:paddingBottom="10dp" android:stateListAnimator="@null" android:text="取消" android:textColor="#666666" android:textSize="15sp" app:layout_constraintEnd_toStartOf="@id/btn_search" app:layout_constraintHorizontal_chainStyle="packed" app:layout_constraintHorizontal_weight="1" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/et_client_name" /> <Button android:id="@+id/btn_search" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginStart="6dp" android:background="@drawable/search_button_ripple" android:clickable="true" android:elevation="2dp" android:focusable="true" android:paddingTop="12dp" android:paddingBottom="12dp" android:stateListAnimator="@null" android:text="搜索" android:textColor="@android:color/white" android:textSize="16sp" android:textStyle="bold" app:layout_constraintBaseline_toBaselineOf="@id/tv_cancel" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_weight="1" app:layout_constraintStart_toEndOf="@id/tv_cancel" /> </androidx.constraintlayout.widget.ConstraintLayout> generallibrary/src/main/res/values/colors.xml
@@ -6,5 +6,7 @@ <color name="nav_item_color">#555555</color> <color name="base_list_bg">#e6e6e6</color> <color name="green">#32CD32</color> <color name="blue">#007BFF</color> <color name="grey">#808080</color> <color name="light_grey">#E0E0E0</color> </resources>