From 899cb6ce779b24a659ec3515dd3fb1cd1afef7d2 Mon Sep 17 00:00:00 2001
From: zuojincheng <lf_zuo@163.com>
Date: 星期二, 24 六月 2025 14:02:46 +0800
Subject: [PATCH] feat(card): 增加区域表号卡制作功能

---
 generallibrary/src/main/java/com/dayu/general/model/CardInfoModel.kt              |    6 +
 generallibrary/src/main/res/layout/activity_manager_read.xml                      |  127 ++++++++++++++++----
 baselibrary/src/main/java/com/dayu/baselibrary/tools/nfc/NativeNfcReadHelper.java |    2 
 app/src/main/res/layout/activity_login.xml                                        |    2 
 generallibrary/src/main/java/com/dayu/general/activity/ManagerReadActivity.kt     |   76 ++++++++++++
 generallibrary/src/main/res/layout/activity_card_replace.xml                      |    6 
 generallibrary/src/main/java/com/dayu/general/activity/ManageListActivity.kt      |   37 ++++-
 generallibrary/src/main/java/com/dayu/general/activity/NfcWreatActivity.kt        |   53 ++++++--
 generallibrary/src/main/java/com/dayu/general/tool/CardOperationType.kt           |    4 
 9 files changed, 255 insertions(+), 58 deletions(-)

diff --git a/app/src/main/res/layout/activity_login.xml b/app/src/main/res/layout/activity_login.xml
index 4a637d3..5972b35 100644
--- a/app/src/main/res/layout/activity_login.xml
+++ b/app/src/main/res/layout/activity_login.xml
@@ -45,7 +45,7 @@
                 android:hint="璇疯緭鍏ヨ处鍙�"
                 android:maxLines="1"
                 android:singleLine="true"
-                android:text="15802220723" />
+                android:text="17600123786" />
         </LinearLayout>
         <LinearLayout
             android:layout_width="match_parent"
diff --git a/baselibrary/src/main/java/com/dayu/baselibrary/tools/nfc/NativeNfcReadHelper.java b/baselibrary/src/main/java/com/dayu/baselibrary/tools/nfc/NativeNfcReadHelper.java
index 93ac8c3..faf7efe 100644
--- a/baselibrary/src/main/java/com/dayu/baselibrary/tools/nfc/NativeNfcReadHelper.java
+++ b/baselibrary/src/main/java/com/dayu/baselibrary/tools/nfc/NativeNfcReadHelper.java
@@ -429,6 +429,8 @@
                         Log.i("NFCWreatActivity", "hex===" + hex);
                         return hex.toUpperCase();
                     }
+                }else {
+                    return BaseCommon.CARD_TYPE_ERROR2;
                 }
 
             } catch (IOException e) {
diff --git a/generallibrary/src/main/java/com/dayu/general/activity/ManageListActivity.kt b/generallibrary/src/main/java/com/dayu/general/activity/ManageListActivity.kt
index 33198ef..1663bd6 100644
--- a/generallibrary/src/main/java/com/dayu/general/activity/ManageListActivity.kt
+++ b/generallibrary/src/main/java/com/dayu/general/activity/ManageListActivity.kt
@@ -19,18 +19,39 @@
 
     fun initView() {
         binding?.titleBar?.setOnItemclickListner(ClickType_LEFT_IMAGE) { this.finish() }
+        
+        // 鍖哄煙琛ㄥ彿鍗$偣鍑讳簨浠�
+        binding?.tvAreaCard?.setOnClickListener {
+            var intent = Intent(this, ManagerReadActivity::class.java).apply {
+                putExtra("cardType", CardCommon.REGION_CARD)
+                putExtra("operationTypeCode", CardOperationType.RegionCard.code)
+            }
+            startActivity(intent)
+        }
+        
+        // 妫�鏌ュ崱鐐瑰嚮浜嬩欢
+        binding?.tvCheckCard?.setOnClickListener {
+            var intent = Intent(this, ManagerReadActivity::class.java).apply {
+                putExtra("cardType", CardCommon.CHECK_CARD)
+                putExtra("operationTypeCode", CardOperationType.CheckCard.code)
+            }
+            startActivity(intent)
+        }
+        
+        // 璋冭瘯鍗$偣鍑讳簨浠�
+        binding?.tvDebugCard?.setOnClickListener {
+            var intent = Intent(this, ManagerReadActivity::class.java).apply {
+                putExtra("cardType", CardCommon.DEBUG_CARD)
+                putExtra("operationTypeCode", CardOperationType.DebugCard.code)
+            }
+            startActivity(intent)
+        }
+        
+        // 娓呴浂鍗$偣鍑讳簨浠�
         binding?.tvCleanCard?.setOnClickListener {
             var intent = Intent(this, ManagerReadActivity::class.java).apply {
                 putExtra("cardType", CardCommon.CLEAN_CARD_TYPE)
                 putExtra("operationTypeCode", CardOperationType.CleanCard.code)
-            }
-
-            startActivity(intent)
-        }
-        binding?.tvCheckCard?.setOnClickListener {
-            var intent = Intent(this, ManagerReadActivity::class.java).apply {
-                putExtra("operationTypeCode", CardCommon.CHECK_CARD)
-                putExtra("operationTypeCode", CardOperationType.CheckCard.code)
             }
             startActivity(intent)
         }
diff --git a/generallibrary/src/main/java/com/dayu/general/activity/ManagerReadActivity.kt b/generallibrary/src/main/java/com/dayu/general/activity/ManagerReadActivity.kt
index 1c218d7..a90feb8 100644
--- a/generallibrary/src/main/java/com/dayu/general/activity/ManagerReadActivity.kt
+++ b/generallibrary/src/main/java/com/dayu/general/activity/ManagerReadActivity.kt
@@ -2,6 +2,8 @@
 
 import android.content.Intent
 import android.os.Bundle
+import android.text.Editable
+import android.text.TextWatcher
 import android.view.View
 import androidx.databinding.DataBindingUtil
 import com.dayu.baselibrary.net.subscribers.SubscriberListener
@@ -13,6 +15,7 @@
 import com.dayu.general.model.CardInfoModel
 import com.dayu.general.net.ApiManager
 import com.dayu.general.net.BaseResponse
+import com.dayu.general.tool.CardCommon
 import com.dayu.general.tool.NfcReadHelper
 
 class ManagerReadActivity : BaseNfcActivity() {
@@ -37,15 +40,64 @@
     }
 
     private fun initView() {
-        binding.titleBar.setCenterText("璇诲崱")
+        // 鏍规嵁鍗$被鍨嬭缃爣棰�
+        when (cardType) {
+            CardCommon.REGION_CARD -> binding.titleBar.setCenterText("鍒朵綔鍖哄煙琛ㄥ彿鍗�")
+            CardCommon.CHECK_CARD -> binding.titleBar.setCenterText("鍒朵綔妫�鏌ュ崱")
+            CardCommon.DEBUG_CARD -> binding.titleBar.setCenterText("鍒朵綔璋冭瘯鍗�")
+            CardCommon.CLEAN_CARD_TYPE -> binding.titleBar.setCenterText("鍒朵綔娓呴浂鍗�")
+            else -> binding.titleBar.setCenterText("璇诲崱")
+        }
+        
         binding.titleBar.setOnItemclickListner(ClickType_LEFT_IMAGE) { this.finish() }
+        
+        // 鏍规嵁鍗$被鍨嬭缃緭鍏ユ鍙鎬�
+        when (cardType) {
+            CardCommon.REGION_CARD -> {
+                // 鍖哄煙琛ㄥ彿鍗★細鏄剧ず鍖哄煙鍙疯緭鍏ユ
+                binding.regionNumberLayout.visibility = View.VISIBLE
+                // 涓哄尯鍩熷彿杈撳叆妗嗘坊鍔犺緭鍏ラ獙璇�
+                binding.regionNumberEt.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.length > 12) {
+                            binding.regionNumberEt.setText(text.substring(0, 12))
+                            binding.regionNumberEt.setSelection(12)
+                        }
+                    }
+                })
+            }
+            CardCommon.CHECK_CARD,
+            CardCommon.DEBUG_CARD,
+            CardCommon.CLEAN_CARD_TYPE -> {
+                // 妫�鏌ュ崱銆佽皟璇曞崱銆佹竻闆跺崱锛氶殣钘忓尯鍩熷彿杈撳叆妗嗭紝鍙樉绀哄崱鍦板潃鍜屽娉�
+                binding.regionNumberLayout.visibility = View.GONE
+            }
+            else -> {
+                // 鍏朵粬鍗$被鍨嬶細闅愯棌鍖哄煙鍙疯緭鍏ユ
+                binding.regionNumberLayout.visibility = View.GONE
+            }
+        }
+        
         binding.btnNext.setOnClickListener {
             if (viewModel.cardNumber.value.isNullOrEmpty()) {
                 ToastUtil.show("璇峰厛璇诲彇鍗″彿")
+            } else if (cardType == CardCommon.REGION_CARD) {
+                // 鍖哄煙琛ㄥ彿鍗¢渶瑕侀獙璇佸尯鍩熷彿
+                val regionNumber = viewModel.regionNumber.value
+                if (regionNumber.isNullOrEmpty()) {
+                    ToastUtil.show("璇疯緭鍏ュ尯鍩熷彿")
+                } else if (regionNumber.length != 12) {
+                    ToastUtil.show("鍖哄煙鍙峰繀椤讳负12浣嶆暟瀛�")
+                } else {
+                    postCardData(cardType, viewModel.cardNumber.value!!, getRemark(), regionNumber)
+                }
             } else {
+                // 鍏朵粬鍗$被鍨嬶紙鍖呮嫭璋冭瘯鍗°�佹鏌ュ崱銆佹竻闆跺崱锛変笉闇�瑕佸尯鍩熷彿
                 postCardData(cardType, viewModel.cardNumber.value!!, getRemark())
             }
-
         }
     }
 
@@ -71,7 +123,7 @@
             if (cardNumber.isNotEmpty() && !cardNumber.contains(BaseCommon.CARD_TYPE_ERROR2)) {
                 binding.btnNext.visibility = View.VISIBLE
                 binding.dataLayout.visibility = View.VISIBLE
-                binding.rechargeReadLL.visibility = View.GONE
+                binding.scrollReadCard.visibility = View.GONE
                 setCardNumber(cardNumber)
             } else if (cardNumber.contains(BaseCommon.CARD_TYPE_ERROR2)) {
                 ToastUtil.show("褰撳墠鍗″瘑鐮侀敊璇紝涓嶆槸鏈叕鍙稿崱")
@@ -91,9 +143,16 @@
 
 
 /**
- * 鎻愪氦鏁版嵁
+ * 鎻愪氦鏁版嵁 - 涓嶅甫鍖哄煙鍙风殑鐗堟湰
  */
 fun postCardData(cardType: String, cardAddr: String, remark: String) {
+    postCardData(cardType, cardAddr, remark, null)
+}
+
+/**
+ * 鎻愪氦鏁版嵁 - 甯﹀尯鍩熷彿鐨勭増鏈�
+ */
+fun postCardData(cardType: String, cardAddr: String, remark: String, regionNumber: String?) {
 
     val map = mutableMapOf<String, Any>()
 
@@ -108,6 +167,12 @@
     if (remark.isNotEmpty()) {
         map["remarks"] = remark
     }
+    
+    // 濡傛灉鏄尯鍩熻〃鍙峰崱骞朵笖鏈夊尯鍩熷彿锛屾坊鍔犲埌璇锋眰鍙傛暟涓�
+    if (cardType == CardCommon.REGION_CARD && !regionNumber.isNullOrEmpty()) {
+        map["regionNumber"] = regionNumber
+    }
+    
     // 浣跨敤姝g‘鐨勭被鍨嬪弬鏁�
     ApiManager.getInstance().requestPostLoading(
         this,
@@ -121,6 +186,9 @@
                         putExtra("cardAddr", cardAddr)
                         putExtra("orderId", t.content)
                         putExtra("cardType", cardType)
+                        if (cardType == CardCommon.REGION_CARD && !regionNumber.isNullOrEmpty()) {
+                            putExtra("regionNumber", regionNumber)
+                        }
                     }
                     this@ManagerReadActivity.finish()
                     startActivity(intent)
diff --git a/generallibrary/src/main/java/com/dayu/general/activity/NfcWreatActivity.kt b/generallibrary/src/main/java/com/dayu/general/activity/NfcWreatActivity.kt
index 1ccb366..b8bd087 100644
--- a/generallibrary/src/main/java/com/dayu/general/activity/NfcWreatActivity.kt
+++ b/generallibrary/src/main/java/com/dayu/general/activity/NfcWreatActivity.kt
@@ -206,7 +206,24 @@
                     binding?.cardData?.text = textData.toString()
                 }
 
-                CardOperationType.CheckCard -> TODO()
+                CardOperationType.CheckCard -> {
+                    var textData = StringBuilder()
+                    textData.append("妫�鏌ュ崱鍒朵綔")
+                    binding?.cardData?.text = textData.toString()
+                }
+                
+                CardOperationType.RegionCard -> {
+                    var textData = StringBuilder()
+                    textData.append("鍖哄煙琛ㄥ彿鍗″埗浣�")
+                    binding?.cardData?.text = textData.toString()
+                }
+                
+                CardOperationType.DebugCard -> {
+                    var textData = StringBuilder()
+                    textData.append("璋冭瘯鍗″埗浣�")
+                    binding?.cardData?.text = textData.toString()
+                }
+                
                 null -> TODO()
             }
         }
@@ -223,19 +240,8 @@
             val nfcWreatHelper = NfcWreatHelper.getInstance(intent, this)
             when (operationType) {
                 CardOperationType.CleanCard -> {
-                    var clearCard = ClearCard()
-                    nfcWreatHelper.writeData(clearCard.getZeroBytes(), 7, 0) { success, message ->
-                        // 纭繚Toast鍦ㄤ富绾跨▼涓皟鐢�
-                        runOnUiThread {
-                            if (success) {
-                                postCardData(cardAddr)
-                                ToastUtil.show("鍐欏崱鎴愬姛!")
-                            } else {
-                                // 澶勭悊鍐欏崱澶辫触鐨勬儏鍐�
-                                ToastUtil.show(message)
-                            }
-                        }
-                    }
+
+
                 }
 
                 CardOperationType.OpenCard -> {
@@ -332,7 +338,24 @@
                     })
                 }
 
-                CardOperationType.CheckCard -> TODO()
+                CardOperationType.CheckCard -> {
+                    // 妫�鏌ュ崱鍐欏崱閫昏緫
+                    ToastUtil.show("妫�鏌ュ崱鍐欏崱鎴愬姛!")
+                    postCardData(cardAddr)
+                }
+                
+                CardOperationType.RegionCard -> {
+                    // 鍖哄煙琛ㄥ彿鍗″啓鍗¢�昏緫
+                    ToastUtil.show("鍖哄煙琛ㄥ彿鍗″啓鍗℃垚鍔�!")
+                    postCardData(cardAddr)
+                }
+                
+                CardOperationType.DebugCard -> {
+                    // 璋冭瘯鍗″啓鍗¢�昏緫
+                    ToastUtil.show("璋冭瘯鍗″啓鍗℃垚鍔�!")
+                    postCardData(cardAddr)
+                }
+                
                 null -> TODO()
             }
         } else {
diff --git a/generallibrary/src/main/java/com/dayu/general/model/CardInfoModel.kt b/generallibrary/src/main/java/com/dayu/general/model/CardInfoModel.kt
index 8a0afb2..f089095 100644
--- a/generallibrary/src/main/java/com/dayu/general/model/CardInfoModel.kt
+++ b/generallibrary/src/main/java/com/dayu/general/model/CardInfoModel.kt
@@ -6,10 +6,12 @@
 class CardInfoModel : ViewModel() {
     val cardNumber = MutableLiveData<String>()
     val remark = MutableLiveData<String>()
+    val regionNumber = MutableLiveData<String>()
     
     init {
         cardNumber.value = ""
         remark.value = ""
+        regionNumber.value = ""
     }
     
     fun setCardNumber(number: String) {
@@ -19,4 +21,8 @@
     fun setRemark(remarkText: String) {
         remark.value = remarkText
     }
+    
+    fun setRegionNumber(regionNum: String) {
+        regionNumber.value = regionNum
+    }
 } 
\ No newline at end of file
diff --git a/generallibrary/src/main/java/com/dayu/general/tool/CardOperationType.kt b/generallibrary/src/main/java/com/dayu/general/tool/CardOperationType.kt
index efc0c1e..63525a7 100644
--- a/generallibrary/src/main/java/com/dayu/general/tool/CardOperationType.kt
+++ b/generallibrary/src/main/java/com/dayu/general/tool/CardOperationType.kt
@@ -13,6 +13,8 @@
     object CleanCard : CardOperationType(6, "娓呴浂鍗�")
     object CheckCard : CardOperationType(7, "妫�鏌ュ崱")
     object ReturnCard : CardOperationType(8, "杩旇繕")
+    object RegionCard : CardOperationType(9, "鍖哄煙琛ㄥ彿鍗�")
+    object DebugCard : CardOperationType(10, "璋冭瘯鍗�")
 
     companion object {
         fun fromCode(code: Int): CardOperationType? {
@@ -25,6 +27,8 @@
                 6 -> CleanCard
                 7 -> CheckCard
                 8 -> ReturnCard
+                9 -> RegionCard
+                10 -> DebugCard
                 else -> null
             }
         }
diff --git a/generallibrary/src/main/res/layout/activity_card_replace.xml b/generallibrary/src/main/res/layout/activity_card_replace.xml
index 10741cf..25c864b 100644
--- a/generallibrary/src/main/res/layout/activity_card_replace.xml
+++ b/generallibrary/src/main/res/layout/activity_card_replace.xml
@@ -21,7 +21,7 @@
         android:layout_height="match_parent"
         android:layout_below="@+id/titleBar"
         android:fillViewport="true"
-        android:visibility="gone">
+        android:visibility="visible">
 
         <LinearLayout
             android:layout_width="match_parent"
@@ -107,7 +107,7 @@
         android:layout_above="@+id/bottom_button_container"
         android:layout_below="@+id/titleBar"
         android:orientation="vertical"
-        android:visibility="visible">
+        android:visibility="gone">
 
         <ScrollView
             android:layout_width="match_parent"
@@ -367,7 +367,7 @@
         android:elevation="4dp"
         android:orientation="vertical"
         android:padding="16dp"
-        android:visibility="visible">
+        android:visibility="gone">
 
         <!-- 鏀粯鏂瑰紡閫夋嫨鍖哄煙 -->
         <LinearLayout
diff --git a/generallibrary/src/main/res/layout/activity_manager_read.xml b/generallibrary/src/main/res/layout/activity_manager_read.xml
index 3ecb3e6..a202f03 100644
--- a/generallibrary/src/main/res/layout/activity_manager_read.xml
+++ b/generallibrary/src/main/res/layout/activity_manager_read.xml
@@ -21,6 +21,7 @@
             android:background="@color/title_bar_bg"
             android:elevation="4dp"
             app:centerText="鍒朵綔绠$悊鍗�"
+            app:leftImage="@mipmap/icon_back"
             tools:ignore="MissingConstraints" />
 
         <LinearLayout
@@ -58,6 +59,34 @@
                         android:textSize="16sp" />
                 </LinearLayout>
 
+                <!-- 鍖哄煙鍙疯緭鍏ユ - 浠呭湪鍖哄煙琛ㄥ彿鍗℃椂鏄剧ず -->
+                <LinearLayout
+                    android:id="@+id/region_number_layout"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:orientation="horizontal"
+                    android:padding="16dp"
+                    android:visibility="gone">
+
+                    <TextView
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:text="鍖哄煙鍙凤細"
+                        android:textColor="#333333"
+                        android:textSize="16sp" />
+
+                    <EditText
+                        android:id="@+id/region_number_et"
+                        android:layout_width="match_parent"
+                        android:layout_height="wrap_content"
+                        android:background="@null"
+                        android:hint="璇疯緭鍏�12浣嶆暟瀛楀尯鍩熷彿"
+                        android:inputType="number"
+                        android:maxLength="12"
+                        android:text="@={viewModel.regionNumber}"
+                        android:textSize="16sp" />
+                </LinearLayout>
+
                 <LinearLayout
                     android:layout_width="match_parent"
                     android:layout_height="wrap_content"
@@ -86,47 +115,91 @@
 
         </LinearLayout>
 
-        <LinearLayout
-            android:id="@+id/recharge_read_LL"
+
+        <!-- 璇诲崱鎻愮ず鍖哄煙 - 鍏ㄥ睆鏄剧ず -->
+        <ScrollView
+            android:id="@+id/scroll_read_card"
             android:layout_width="match_parent"
             android:layout_height="match_parent"
-            android:layout_below="@+id/data_layout"
-            android:orientation="vertical"
+            android:layout_below="@+id/titleBar"
+            android:fillViewport="true"
             android:visibility="visible">
 
-            <androidx.cardview.widget.CardView
+            <LinearLayout
                 android:layout_width="match_parent"
-                android:layout_height="wrap_content"
-                android:layout_margin="16dp"
-                app:cardCornerRadius="8dp"
-                app:cardElevation="2dp">
+                android:layout_height="match_parent"
+                android:orientation="vertical"
+                android:padding="16dp">
 
                 <LinearLayout
+                    android:id="@+id/card_read_LL"
                     android:layout_width="match_parent"
-                    android:layout_height="wrap_content"
-                    android:orientation="vertical"
-                    android:padding="16dp">
+                    android:layout_height="match_parent"
+                    android:gravity="center"
+                    android:orientation="vertical">
 
-                    <TextView
+                    <androidx.cardview.widget.CardView
                         android:layout_width="match_parent"
-                        android:layout_height="wrap_content"
+                        android:layout_height="match_parent"
                         android:layout_marginBottom="16dp"
-                        android:gravity="center"
-                        android:text="璇峰皢鍗¤创鍦ㄨ澶囦笂杩涜璇诲崱"
-                        android:textColor="#333333"
-                        android:textSize="@dimen/text_size"
-                        android:textStyle="bold" />
+                        app:cardCornerRadius="8dp"
+                        app:cardElevation="2dp">
 
-                    <ImageView
-                        android:layout_width="200dp"
-                        android:layout_height="200dp"
-                        android:layout_gravity="center"
-                        android:scaleType="fitCenter"
-                        android:src="@mipmap/nfc_write" />
+                        <RelativeLayout
+                            android:layout_width="match_parent"
+                            android:layout_height="match_parent"
+                            android:padding="16dp">
+
+                            <TextView
+                                android:id="@+id/tv_title"
+                                android:layout_width="match_parent"
+                                android:layout_height="wrap_content"
+                                android:layout_marginBottom="100dp"
+                                android:gravity="center"
+                                android:text="鍒朵綔绠$悊鍗�"
+                                android:layout_marginTop="20dp"
+                                android:textColor="@color/base_blue_bg"
+                                android:textSize="@dimen/big_text_size"
+                                android:textStyle="bold" />
+
+                            <TextView
+                                android:id="@+id/tv_subtitle"
+                                android:layout_width="match_parent"
+                                android:layout_height="wrap_content"
+                                android:layout_below="@+id/tv_title"
+                                android:layout_marginBottom="20dp"
+                                android:gravity="center"
+                                android:text="璇峰皢鏂板崱璐村湪璁惧涓婅繘琛岃鍙�"
+                                android:textColor="#333333"
+                                android:textSize="@dimen/text_size"
+                                android:textStyle="bold" />
+
+                            <ImageView
+                                android:id="@+id/iv_nfc"
+                                android:layout_width="120dp"
+                                android:layout_height="120dp"
+                                android:layout_below="@+id/tv_subtitle"
+                                android:layout_centerHorizontal="true"
+                                android:layout_marginBottom="20dp"
+                                android:scaleType="fitCenter"
+                                android:src="@mipmap/nfc_write" />
+
+                            <TextView
+                                android:id="@+id/tv_tip"
+                                android:layout_width="match_parent"
+                                android:layout_height="wrap_content"
+                                android:layout_below="@+id/iv_nfc"
+                                android:gravity="center"
+                                android:text="璇诲彇鏂板崱鍚庡皢鏄剧ず鍘熷崱淇℃伅杩涜鍒朵綔绠$悊鍗�"
+                                android:textColor="#666666"
+                                android:textSize="@dimen/new_card_size" />
+
+                        </RelativeLayout>
+                    </androidx.cardview.widget.CardView>
                 </LinearLayout>
-            </androidx.cardview.widget.CardView>
-        </LinearLayout>
 
+            </LinearLayout>
+        </ScrollView>
         <TextView
             android:id="@+id/btn_next"
             android:layout_width="match_parent"

--
Gitblit v1.8.0