From 2a117297daf83b2e1a104603e9641226d5beeba3 Mon Sep 17 00:00:00 2001 From: cloudroam <cloudroam> Date: 星期二, 04 三月 2025 10:41:38 +0800 Subject: [PATCH] fix: 按天统计相关逻辑 --- app/src/main/java/com/example/firstapp/database/repository/CodeRepository.kt | 26 +++++ app/src/main/java/com/example/firstapp/receiver/SmsReceiver.kt | 2 app/src/main/java/com/example/firstapp/ui/dashboard/DashboardFragment.kt | 38 +++---- app/src/main/java/com/example/firstapp/database/dao/CodeDao.kt | 42 ++++++++ app/src/main/java/com/example/firstapp/adapter/PackageAdapter.kt | 47 +++++++- app/src/main/java/com/example/firstapp/database/entity/Code.kt | 4 app/src/main/java/com/example/firstapp/ui/dashboard/DashboardViewModel.kt | 28 ++--- app/src/main/java/com/example/firstapp/model/DailyStat.kt | 6 /dev/null | 34 ------ app/src/main/java/com/example/firstapp/model/CourierStat.kt | 8 app/src/main/java/com/example/firstapp/database/AppDatabase.kt | 6 - app/src/main/res/layout/fragment_dashboard.xml | 6 app/src/main/java/com/example/firstapp/MainActivity.kt | 2 app/src/main/res/layout/item_package_dashboard.xml | 26 ++++ 14 files changed, 170 insertions(+), 105 deletions(-) diff --git a/app/src/main/java/com/example/firstapp/MainActivity.kt b/app/src/main/java/com/example/firstapp/MainActivity.kt index bd37767..52a8e13 100644 --- a/app/src/main/java/com/example/firstapp/MainActivity.kt +++ b/app/src/main/java/com/example/firstapp/MainActivity.kt @@ -232,7 +232,7 @@ android.util.Log.d("SmsReceiver", "Received SMS code: ${code}") val msg = Msg(0, "1111", "111111", messageBody.toString(), 1, "111", 1, 1) val msgId = Core.msg.insert(msg) - val code = Code(0, rule.type, 1, rule.content, 1, 1, msgId, code, dateString, "中通",0) + val code = Code(0, rule.type, 1, rule.content, 1, 1, msgId, code, dateString, "中通",0,"","") Core.code.insert(code) android.util.Log.d("SMS_DEBUG", "历史短信已保存到数据库") }else{ diff --git a/app/src/main/java/com/example/firstapp/adapter/PackageAdapter.kt b/app/src/main/java/com/example/firstapp/adapter/PackageAdapter.kt index 4abce71..21edc63 100644 --- a/app/src/main/java/com/example/firstapp/adapter/PackageAdapter.kt +++ b/app/src/main/java/com/example/firstapp/adapter/PackageAdapter.kt @@ -7,20 +7,23 @@ import android.widget.TextView import androidx.recyclerview.widget.RecyclerView import com.example.firstapp.R -import com.example.firstapp.model.PackageInfo +import com.example.firstapp.database.entity.Code +import java.text.ParseException import java.text.SimpleDateFormat +import java.util.Date import java.util.Locale class PackageAdapter : RecyclerView.Adapter<PackageAdapter.PackageViewHolder>() { - private var packages = listOf<PackageInfo>() + private var packages = listOf<Code>() - fun updatePackages(newPackages: List<PackageInfo>) { + fun updatePackages(newPackages: List<Code>) { packages = newPackages notifyDataSetChanged() } + //此处是渲染数据 override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): PackageViewHolder { val view = LayoutInflater.from(parent.context) .inflate(R.layout.item_package_dashboard, parent, false) @@ -38,13 +41,39 @@ private val textCourierName: TextView = view.findViewById(R.id.text_courier_name) private val textTrackingNumber: TextView = view.findViewById(R.id.text_tracking_number) private val textTime: TextView = view.findViewById(R.id.text_time) + private val textPickTime: TextView = view.findViewById(R.id.text_pick_time) - fun bind(packageInfo: PackageInfo) { - imgCourier.setImageResource(packageInfo.courierIcon) - textCourierName.text = packageInfo.courierName - textTrackingNumber.text = packageInfo.trackingNumber - textTime.text = SimpleDateFormat("yyyy-MM-dd HH:mm", Locale.getDefault()) - .format(packageInfo.receivedTime) + fun bind(code: Code) { +// imgCourier.setImageResource(code.category) + textCourierName.text = code.type + textTrackingNumber.text = code.code + // 步骤1:定义解析器,将字符串转为 Date + val parser = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault()) + val formatter = SimpleDateFormat("yyyy-MM-dd HH:mm", Locale.getDefault()) + try { + val date: Date? = parser.parse(code.createtime) // 解析字符串 + date?.let { + textTime.text = "到货:"+formatter.format(it) // 格式化并赋值 + } ?: run { + // 处理解析失败(date 为 null 的情况) + textTime.text = "Invalid Date" + } + } catch (e: ParseException) { + e.printStackTrace() + textTime.text = "Format Error" + } + try { + val date2: Date? = parser.parse(code.pickuptime) // 解析字符串 + date2?.let { + textPickTime.text = "取件:"+formatter.format(it) // 格式化并赋值 + } ?: run { + textPickTime.text = "未取件" + } + } catch (e: ParseException) { + e.printStackTrace() + textPickTime.text = "未取件" + } + } } } diff --git a/app/src/main/java/com/example/firstapp/dao/PackageDao.kt b/app/src/main/java/com/example/firstapp/dao/PackageDao.kt deleted file mode 100644 index e156386..0000000 --- a/app/src/main/java/com/example/firstapp/dao/PackageDao.kt +++ /dev/null @@ -1,49 +0,0 @@ -package com.example.firstapp.dao - -import androidx.room.* -import com.example.firstapp.model.PackageInfo -import com.example.firstapp.model.CourierStat -import com.example.firstapp.model.DailyStat -import kotlinx.coroutines.flow.Flow - -@Dao -interface PackageDao { - @Query("SELECT * FROM packages WHERE date(receivedTime/1000, 'unixepoch', 'localtime') = date(:date/1000, 'unixepoch', 'localtime') ORDER BY receivedTime DESC") - fun getPackagesByDay(date: Long): Flow<List<PackageInfo>> - - @Query(""" - SELECT * FROM packages - WHERE strftime('%Y-%W', receivedTime/1000, 'unixepoch', 'localtime') = - strftime('%Y-%W', :date/1000, 'unixepoch', 'localtime') - ORDER BY receivedTime DESC - """) - fun getPackagesByWeek(date: Long): Flow<List<PackageInfo>> - - @Query(""" - SELECT * FROM CourierStat - WHERE EXISTS ( - SELECT 1 FROM packages p - WHERE p.courierName = CourierStat.courierName - AND strftime('%Y-%W', p.receivedTime/1000, 'unixepoch', 'localtime') = - strftime('%Y-%W', :date/1000, 'unixepoch', 'localtime') - ) - """) - fun getCourierStatsByWeek(date: Long): Flow<List<CourierStat>> - - @Query(""" - SELECT * FROM DailyStat - WHERE EXISTS ( - SELECT 1 FROM packages p - WHERE date(p.receivedTime/1000, 'unixepoch', 'localtime') = DailyStat.date - AND strftime('%Y-%W', p.receivedTime/1000, 'unixepoch', 'localtime') = - strftime('%Y-%W', :date/1000, 'unixepoch', 'localtime') - ) - """) - fun getDailyStatsByWeek(date: Long): Flow<List<DailyStat>> - - @Insert(onConflict = OnConflictStrategy.REPLACE) - fun insert(packageInfo: PackageInfo) - - @Update - fun update(packageInfo: PackageInfo) -} \ No newline at end of file diff --git a/app/src/main/java/com/example/firstapp/database/AppDatabase.kt b/app/src/main/java/com/example/firstapp/database/AppDatabase.kt index b520136..626aae1 100644 --- a/app/src/main/java/com/example/firstapp/database/AppDatabase.kt +++ b/app/src/main/java/com/example/firstapp/database/AppDatabase.kt @@ -7,7 +7,6 @@ import androidx.room.TypeConverters import androidx.room.migration.Migration import androidx.sqlite.db.SupportSQLiteDatabase -import com.example.firstapp.dao.PackageDao import com.example.firstapp.database.dao.CodeDao import com.example.firstapp.database.dao.KeywordDao import com.example.firstapp.database.dao.MsgDao @@ -21,7 +20,6 @@ import com.example.firstapp.utils.TAG_LIST import com.example.firstapp.database.ext.ConvertersDate -import com.example.firstapp.model.PackageInfo import com.example.firstapp.model.CourierStat import com.example.firstapp.model.DailyStat @@ -31,8 +29,7 @@ Msg::class, Code::class, KeywordEntity::class, - Reminder::class, - PackageInfo::class + Reminder::class ], views = [ CourierStat::class, @@ -47,7 +44,6 @@ abstract fun codeDao(): CodeDao abstract fun keywordDao(): KeywordDao abstract fun reminderDao(): ReminderDao - abstract fun packageDao(): PackageDao companion object { @Volatile diff --git a/app/src/main/java/com/example/firstapp/database/dao/CodeDao.kt b/app/src/main/java/com/example/firstapp/database/dao/CodeDao.kt index b27f1dd..d86d5c1 100644 --- a/app/src/main/java/com/example/firstapp/database/dao/CodeDao.kt +++ b/app/src/main/java/com/example/firstapp/database/dao/CodeDao.kt @@ -7,7 +7,10 @@ import androidx.room.Update import com.example.firstapp.database.entity.Code import com.example.firstapp.database.entity.Msg +import com.example.firstapp.model.CourierStat +import com.example.firstapp.model.DailyStat import io.reactivex.Completable +import kotlinx.coroutines.flow.Flow @Dao interface CodeDao { @@ -54,6 +57,43 @@ fun queryByTypeAndCodeAndDate(content: String, code: String, dateString: String): Code - @Query("update Code set pickup = '1' where id=:id") + @Query("update Code set pickup = '1' , pickuptime = CURRENT_TIMESTAMP where id=:id") fun pickup(id: Long) + + //查询当天包裹信息 + @Query("SELECT * FROM code WHERE date(createtime) = date(:date/1000, 'unixepoch', 'localtime') ORDER BY createtime DESC") + fun getNewPackagesByDay(date: Long): List<Code> + + @Query("SELECT * FROM code WHERE date(createtime/1000, 'unixepoch', 'localtime') = date(:date/1000, 'unixepoch', 'localtime') ORDER BY createtime DESC") + fun getPackagesByDay(date: Long): Flow<List<Code>> + + @Query(""" + SELECT * FROM code + WHERE strftime('%Y-%W', createtime/1000, 'unixepoch', 'localtime') = + strftime('%Y-%W', :date/1000, 'unixepoch', 'localtime') + ORDER BY createtime DESC + """) + fun getPackagesByWeek(date: Long): Flow<List<Code>> + + @Query(""" + SELECT * FROM CourierStat + WHERE EXISTS ( + SELECT 1 FROM code p + WHERE p.category = CourierStat.category + AND strftime('%Y-%W', p.createtime/1000, 'unixepoch', 'localtime') = + strftime('%Y-%W', :date/1000, 'unixepoch', 'localtime') + ) + """) + fun getCourierStatsByWeek(date: Long): Flow<List<CourierStat>> + + @Query(""" + SELECT * FROM DailyStat + WHERE EXISTS ( + SELECT 1 FROM code p + WHERE date(p.createtime/1000, 'unixepoch', 'localtime') = DailyStat.date + AND strftime('%Y-%W', p.createtime/1000, 'unixepoch', 'localtime') = + strftime('%Y-%W', :date/1000, 'unixepoch', 'localtime') + ) + """) + fun getDailyStatsByWeek(date: Long): Flow<List<DailyStat>> } diff --git a/app/src/main/java/com/example/firstapp/database/entity/Code.kt b/app/src/main/java/com/example/firstapp/database/entity/Code.kt index 30dff0a..40a1ac5 100644 --- a/app/src/main/java/com/example/firstapp/database/entity/Code.kt +++ b/app/src/main/java/com/example/firstapp/database/entity/Code.kt @@ -17,7 +17,7 @@ var createtime: String, var name: String, var pickup: Int, + var pickuptime: String, //取件时间 + var overtime: String, // 超期时间 var time: Date = Date(), -// var overtime: String, - ) diff --git a/app/src/main/java/com/example/firstapp/database/repository/CodeRepository.kt b/app/src/main/java/com/example/firstapp/database/repository/CodeRepository.kt index bd77948..f187d22 100644 --- a/app/src/main/java/com/example/firstapp/database/repository/CodeRepository.kt +++ b/app/src/main/java/com/example/firstapp/database/repository/CodeRepository.kt @@ -3,6 +3,9 @@ import androidx.annotation.WorkerThread import com.example.firstapp.database.dao.CodeDao import com.example.firstapp.database.entity.Code +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.withContext class CodeRepository(private val codeDao: CodeDao) { @@ -23,9 +26,30 @@ } fun queryByTypeAndCodeAndDate(content: String, code: String, dateString: String): Code { - return codeDao.queryByTypeAndCodeAndDate(content,code,dateString) + return codeDao.queryByTypeAndCodeAndDate(content, code, dateString) } @WorkerThread fun pickup(id: Long) = codeDao.pickup(id) + + + fun getPackages(date: Long, dateType: String): Flow<List<Code>> { + return when (dateType) { + "DAY" -> codeDao.getPackagesByDay(date) + "WEEK" -> codeDao.getPackagesByWeek(date) + else -> codeDao.getPackagesByDay(date) + } + } + + fun getCourierStats(date: Long) = codeDao.getCourierStatsByWeek(date) + + fun getDailyStats(date: Long) = codeDao.getDailyStatsByWeek(date) + + + @WorkerThread + fun getPackagesByDay(date: Long): List<Code> { + return codeDao.getNewPackagesByDay(date) + } + + } \ No newline at end of file diff --git a/app/src/main/java/com/example/firstapp/model/CourierStat.kt b/app/src/main/java/com/example/firstapp/model/CourierStat.kt index c112e7c..8abab2c 100644 --- a/app/src/main/java/com/example/firstapp/model/CourierStat.kt +++ b/app/src/main/java/com/example/firstapp/model/CourierStat.kt @@ -4,12 +4,12 @@ @DatabaseView( """ - SELECT courierName, COUNT(*) as count - FROM packages - GROUP BY courierName + SELECT category, COUNT(*) as count + FROM Code + GROUP BY category """ ) data class CourierStat( - val courierName: String, + val category: String, val count: Int ) \ No newline at end of file diff --git a/app/src/main/java/com/example/firstapp/model/DailyStat.kt b/app/src/main/java/com/example/firstapp/model/DailyStat.kt index dc61551..5cd26c6 100644 --- a/app/src/main/java/com/example/firstapp/model/DailyStat.kt +++ b/app/src/main/java/com/example/firstapp/model/DailyStat.kt @@ -4,10 +4,10 @@ @DatabaseView( """ - SELECT date(receivedTime/1000, 'unixepoch', 'localtime') as date, + SELECT date(createtime/1000, 'unixepoch', 'localtime') as date, COUNT(*) as count - FROM packages - GROUP BY date(receivedTime/1000, 'unixepoch', 'localtime') + FROM code + GROUP BY date(createtime/1000, 'unixepoch', 'localtime') """ ) data class DailyStat( diff --git a/app/src/main/java/com/example/firstapp/model/PackageInfo.kt b/app/src/main/java/com/example/firstapp/model/PackageInfo.kt deleted file mode 100644 index d1e2005..0000000 --- a/app/src/main/java/com/example/firstapp/model/PackageInfo.kt +++ /dev/null @@ -1,15 +0,0 @@ -package com.example.firstapp.model - -import androidx.room.Entity -import androidx.room.PrimaryKey - -@Entity(tableName = "packages") -data class PackageInfo( - @PrimaryKey - val trackingNumber: String, // 快递单号 - val courierName: String, // 快递公司名称 - val receivedTime: Long, // 收件时间 - val courierIcon: Int, // 快递公司图标资源ID - val status: Int = 0 // 取件状态: 0-未取件, 1-已取件 -) - diff --git a/app/src/main/java/com/example/firstapp/receiver/SmsReceiver.kt b/app/src/main/java/com/example/firstapp/receiver/SmsReceiver.kt index f45812a..711ad6b 100644 --- a/app/src/main/java/com/example/firstapp/receiver/SmsReceiver.kt +++ b/app/src/main/java/com/example/firstapp/receiver/SmsReceiver.kt @@ -85,7 +85,7 @@ val createtime = sdf.format(date) val existingCode = Core.code.queryByTypeAndCodeAndDate(rule.content, code, createtime) if (existingCode == null) { - val code = Code(0, rule.type, 1, rule.content, 1, 1, msgId, code, createtime, "中通",0) + val code = Code(0, rule.type, 1, rule.content, 1, 1, msgId, code, createtime, "中通",0,"","") Core.code.insert(code) Log.d("SMS_DEBUG", "新短信已保存到数据库") diff --git a/app/src/main/java/com/example/firstapp/repository/PackageRepository.kt b/app/src/main/java/com/example/firstapp/repository/PackageRepository.kt deleted file mode 100644 index 082178c..0000000 --- a/app/src/main/java/com/example/firstapp/repository/PackageRepository.kt +++ /dev/null @@ -1,34 +0,0 @@ -package com.example.firstapp.repository - -import com.example.firstapp.dao.PackageDao -import com.example.firstapp.model.PackageInfo -import kotlinx.coroutines.flow.Flow -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.withContext - -class PackageRepository(private val packageDao: PackageDao) { - - fun getPackages(date: Long, dateType: String): Flow<List<PackageInfo>> { - return when(dateType) { - "DAY" -> packageDao.getPackagesByDay(date) - "WEEK" -> packageDao.getPackagesByWeek(date) - else -> packageDao.getPackagesByDay(date) - } - } - - fun getCourierStats(date: Long) = packageDao.getCourierStatsByWeek(date) - - fun getDailyStats(date: Long) = packageDao.getDailyStatsByWeek(date) - - suspend fun insert(packageInfo: PackageInfo) { - withContext(Dispatchers.IO) { - packageDao.insert(packageInfo) - } - } - - suspend fun update(packageInfo: PackageInfo) { - withContext(Dispatchers.IO) { - packageDao.update(packageInfo) - } - } -} \ No newline at end of file diff --git a/app/src/main/java/com/example/firstapp/ui/dashboard/DashboardFragment.kt b/app/src/main/java/com/example/firstapp/ui/dashboard/DashboardFragment.kt index 992fcb1..565676c 100644 --- a/app/src/main/java/com/example/firstapp/ui/dashboard/DashboardFragment.kt +++ b/app/src/main/java/com/example/firstapp/ui/dashboard/DashboardFragment.kt @@ -13,7 +13,7 @@ import com.google.android.material.tabs.TabLayout import androidx.recyclerview.widget.LinearLayoutManager import com.example.firstapp.adapter.PackageAdapter -import com.example.firstapp.model.PackageInfo +import com.example.firstapp.core.Core import com.github.mikephil.charting.charts.BarChart import com.github.mikephil.charting.charts.PieChart import com.github.mikephil.charting.components.Legend @@ -185,7 +185,7 @@ private fun updatePieChartData() { viewModel.getCourierStats(currentDate.timeInMillis).observe(viewLifecycleOwner) { stats -> val entries = stats.map { stat -> - PieEntry(stat.count.toFloat(), stat.courierName) + PieEntry(stat.count.toFloat(), stat.category) } val dataSet = PieDataSet(entries, "快递公司分布") @@ -204,24 +204,18 @@ private fun loadPackages() { // 这里应该从数据库或网络加载数据 - // 这里使用模拟数据作为示例 - val mockPackages = listOf( - PackageInfo( - trackingNumber = "14-6-7023", - courierName = "某快递", - receivedTime = System.currentTimeMillis(), - courierIcon = R.drawable.data - ), - PackageInfo( - trackingNumber = "230721", - courierName = "京东", - receivedTime = System.currentTimeMillis() - 3600000, - courierIcon = R.drawable.data - ) - ) - - packageAdapter.updatePackages(mockPackages) - binding.textPackageCount.text = "${mockPackages.size}个" + // 根据当前选择的日期类型传入对应参数 + val packages = when (currentDateType) { + DateType.DAY -> Core.code.getPackagesByDay(currentDate.timeInMillis) +// DateType.WEEK -> Core.code.getPackagesByWeek(currentDate.timeInMillis) +// DateType.MONTH -> Core.code.getPackagesByMonth(currentDate.timeInMillis) +// DateType.YEAR -> Core.code.getPackagesByYear(currentDate.timeInMillis) + DateType.WEEK -> TODO() + DateType.MONTH -> TODO() + DateType.YEAR -> TODO() + } + packageAdapter.updatePackages(packages) + binding.textPackageCount.text = "${packageAdapter.itemCount}个" } private fun observePackages() { viewModel.getPackages( @@ -235,8 +229,8 @@ updatePieChartData() } else -> { - packageAdapter.updatePackages(packages) - } + packageAdapter.updatePackages(packages) + } } binding.textPackageCount.text = "${packages.size}个" } diff --git a/app/src/main/java/com/example/firstapp/ui/dashboard/DashboardViewModel.kt b/app/src/main/java/com/example/firstapp/ui/dashboard/DashboardViewModel.kt index dae2211..c2c0fc9 100644 --- a/app/src/main/java/com/example/firstapp/ui/dashboard/DashboardViewModel.kt +++ b/app/src/main/java/com/example/firstapp/ui/dashboard/DashboardViewModel.kt @@ -5,31 +5,27 @@ import androidx.lifecycle.asLiveData import androidx.lifecycle.viewModelScope import com.example.firstapp.AppDatabase -import com.example.firstapp.model.PackageInfo -import com.example.firstapp.repository.PackageRepository +import com.example.firstapp.database.entity.Code +import com.example.firstapp.database.repository.CodeRepository import kotlinx.coroutines.launch class DashboardViewModel(application: Application) : AndroidViewModel(application) { - - private val repository: PackageRepository - + + private val repository: CodeRepository + init { - val packageDao = AppDatabase.getInstance(application).packageDao() - repository = PackageRepository(packageDao) + val codeDao = AppDatabase.getInstance(application).codeDao() + repository = CodeRepository(codeDao) } - - fun getPackages(date: Long, dateType: String) = + + fun getPackages(date: Long, dateType: String) = repository.getPackages(date, dateType).asLiveData() fun getCourierStats(date: Long) = repository.getCourierStats(date).asLiveData() - + fun getDailyStats(date: Long) = repository.getDailyStats(date).asLiveData() - fun updatePackageStatus(packageInfo: PackageInfo) = viewModelScope.launch { - repository.update(packageInfo) - } - - fun insert(packageInfo: PackageInfo) = viewModelScope.launch { - repository.insert(packageInfo) + fun insert(code: Code) = viewModelScope.launch { + repository.insert(code) } } \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_dashboard.xml b/app/src/main/res/layout/fragment_dashboard.xml index 4d90e0c..8e543a4 100644 --- a/app/src/main/res/layout/fragment_dashboard.xml +++ b/app/src/main/res/layout/fragment_dashboard.xml @@ -84,16 +84,18 @@ android:padding="16dp"> <ImageView - android:layout_width="48dp" + android:layout_width="0dp" android:layout_height="48dp" + android:layout_weight="1" android:src="@drawable/resource_package" /> <TextView android:id="@+id/text_package_count" - android:layout_width="wrap_content" + android:layout_width="0dp" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:layout_marginStart="16dp" + android:layout_weight="1" android:textSize="24sp" android:textStyle="bold" tools:text="4个" /> diff --git a/app/src/main/res/layout/item_package_dashboard.xml b/app/src/main/res/layout/item_package_dashboard.xml index b0990bb..fbb34f9 100644 --- a/app/src/main/res/layout/item_package_dashboard.xml +++ b/app/src/main/res/layout/item_package_dashboard.xml @@ -46,12 +46,30 @@ tools:text="2025-01-14 10:30" /> </LinearLayout> - <TextView - android:id="@+id/text_tracking_number" + <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" - android:textColor="@android:color/darker_gray" - tools:text="14-6-7023" /> + android:orientation="vertical"> + + <TextView + android:id="@+id/text_tracking_number" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:textColor="@android:color/darker_gray" + android:layout_gravity="end" + tools:text="14-6-7023" /> + + <TextView + android:id="@+id/text_pick_time" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginTop="4dp" + android:textColor="@android:color/darker_gray" + android:layout_gravity="end" + android:textSize="12sp" + tools:text="2025-01-15 11:30" /> + </LinearLayout> + </LinearLayout> </androidx.cardview.widget.CardView> \ No newline at end of file -- Gitblit v1.9.3