feat: 添加工具类

This commit is contained in:
Quyunshuo
2021-03-16 09:59:48 +08:00
parent a0f325b559
commit f4ce4742e6
2 changed files with 123 additions and 7 deletions

View File

@ -0,0 +1,47 @@
package com.quyunshuo.base.utils
import android.app.Activity
import android.content.Context
import android.view.View
import android.view.inputmethod.InputMethodManager
import com.quyunshuo.base.BaseApplication
import java.lang.reflect.Field
/**
* 解决 Android 自身的 Bug
*
* @author Qu Yunshuo
* @since 2020/10/22
*/
class AndroidBugFixUtils {
/**
* 解决 InputMethodManager 造成的内存泄露
*
* 使用方式:
* ```
* override fun onDestroy() {
* AndroidBugFixUtils().fixSoftInputLeaks(this)
* super.onDestroy()
* }
* ```
*/
fun fixSoftInputLeaks(activity: Activity) {
val imm =
BaseApplication.context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
val leakViews = arrayOf("mLastSrvView", "mCurRootView", "mServedView", "mNextServedView")
for (leakView in leakViews) {
try {
val leakViewField: Field =
InputMethodManager::class.java.getDeclaredField(leakView) ?: continue
if (!leakViewField.isAccessible) leakViewField.isAccessible = true
val view: Any? = leakViewField.get(imm)
if (view !is View) continue
if (view.rootView == activity.window.decorView.rootView) {
leakViewField.set(imm, null)
}
} catch (t: Throwable) {
}
}
}
}

View File

@ -5,16 +5,40 @@ import java.text.SimpleDateFormat
import java.util.*
/**
* @Author: QuYunShuo
* @Time: 2020/9/8
* @Class: DateUtils
* @Remark: 时间工具类
* 时间工具类
* ________________________________________________________________________________________
* |字母 |日期或时间元素 | 表示 | 示例 |
* |:--:|:--------------------:|:-----------------:|:------------------------------------:|
* |G |Era 标志符 | Text | AD |
* |y |年 | Year | 1996; 96 |
* |M |年中的月份 | Month | July; Jul; 07 |
* |w |年中的周数 | Number | 27 |
* |W |月份中的周数 | Number | 2 |
* |D |年中的天数 | Number | 189 |
* |d |月份中的天数 | Number | 10 |
* |F |月份中的星期 | Number | 2 |
* |E |星期中的天数 | Text | Tuesday; Tue |
* |a |Am/pm 标记 | Text | PM |
* |H |一天中的小时数(0-23) | Number | 0 |
* |k |一天中的小时数(1-24 | Number | 24 |
* |K |am/pm 中的小时数(0-11) | Number | 0 |
* |h |am/pm 中的小时数(1-12) | Number | 12 |
* |m |小时中的分钟数 | Number | 30 |
* |s |分钟中的秒数 | Number | 55 |
* |S |毫秒数 | Number | 978 |
* |z |时区 | General time zone | Pacific Standard Time; PST; GMT-08:00|
* |Z |时区 | RFC 822 time zone | -0800 |
*  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
* @author Qu Yunshuo
* @since 2020/9/8
*/
object DateUtils {
/**
* 获取时间格式化String
* @param timestamp 时间戳
* @param dateFormat 日期格式
* @return 格式化后的字符串
*/
fun getDateFormatString(timestamp: Long, dateFormat: String): String =
SimpleDateFormat(dateFormat, Locale.CHINESE).format(Date(timestamp))
@ -22,15 +46,15 @@ object DateUtils {
/**
* 将固定格式[dateFormat]的时间字符串[dateString]转换为时间值
*/
fun getDateStringToDate(dateString: String, dateFormat: String): Long {
fun getDateStringToDate(dateString: String, dateFormat: String): Long? {
val simpleDateFormat = SimpleDateFormat(dateFormat, Locale.CHINESE)
var date = Date()
var date: Date? = null
try {
date = simpleDateFormat.parse(dateString)
} catch (e: ParseException) {
e.printStackTrace()
}
return date.time
return date?.time
}
/**
@ -114,4 +138,49 @@ object DateUtils {
)
return calendar.time.time
}
/**
* String 转化 Calendar
* @param string String
* @param format String
*/
fun stringToCalendar(string: String, format: String): Calendar? {
val sdf = SimpleDateFormat(format, Locale.CHINESE)
var calendar: Calendar
try {
val date: Date = sdf.parse(string) ?: return null
calendar = Calendar.getInstance()
calendar.time = date
} catch (e: ParseException) {
e.printStackTrace()
calendar = Calendar.getInstance()
}
return calendar
}
/**
* String 转化Date
* @param str String
* @param format String
* @return Date
*/
fun strToDate(str: String, format: String): Date? {
val sdf = SimpleDateFormat(format, Locale.CHINESE)
return try {
sdf.parse(str)
} catch (e: ParseException) {
e.printStackTrace()
null
}
}
/**
* 判断两个时间是否是同一天
* @param cal1 Calendar
* @param cal2 Calendar
* @return Boolean
*/
fun isSameDay(cal1: Calendar, cal2: Calendar): Boolean {
return cal1[0] == cal2[0] && cal1[1] == cal2[1] && cal1[6] == cal2[6]
}
}