来源
/**
* 屏幕单位转换
*/
class DisplayUtils private constructor(){
companion object{
// 单例模式
val instant: DisplayUtils by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) { DisplayUtils() }
}
/**
* 获取屏幕的高度
*/
fun getWindowHeight(activity: Activity): Int{
val dm : DisplayMetrics = DisplayMetrics();
activity.windowManager.defaultDisplay.getMetrics(dm)
return dm.heightPixels;
}
/**
* 获取屏幕的宽度
*/
fun getWindowWidth(activity: Activity): Int{
val dm : DisplayMetrics = DisplayMetrics();
activity.windowManager.defaultDisplay.getMetrics(dm)
return dm.widthPixels;
}
/**
* dp单位转换成px单位
*/
fun dpToPx(context: Context,dp : Float): Int{
val scale = context.getResources().getDisplayMetrics().density;
return (dp * scale + 0.5f).toInt();
}
/**
* dp单位转换为px单位
*/
fun dpToPx(context: Context,dp : Int): Int{
return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,
dp.toFloat(),context.getResources().getDisplayMetrics()).toInt();
}
/**
* px单位转换为dip单位
*/
fun pxToDip(context: Context,px : Float): Int{
val scale = context.getResources().getDisplayMetrics().density
return (px / scale + 0.5f).toInt();
}
/**
* dip单位转换为px单位
*/
fun dipToPx(context: Context,dip : Float): Int{
val scale =context.getResources().getDisplayMetrics().density
return (dip * scale + 0.5f).toInt();
}
/**
* sp单位转换为px单位
*/
fun spToPx(context: Context,sp : Float): Int{
val scale = context.getResources().getDisplayMetrics().scaledDensity
return (sp * scale + 0.5f).toInt();
}
/**
* px单位转换为sp单位
*/
fun pxToSp(context: Context,px : Float): Int{
val scale = context.getResources().getDisplayMetrics().scaledDensity
return (px / scale + 0.5f).toInt();
}
}
package com.example.testutils
import android.util.Log
class LogUtils private constructor(){
private var isPrintLog = true
private var defaultTag = "zhang_xin"
companion object {
// 单例模式(双重锁校验模式)
val MyLog: LogUtils by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) { LogUtils() }
}
fun isPrintLog(pring : Boolean) {
this.isPrintLog = pring
}
fun i(msg: String,tag:String =defaultTag) {
if(isPrintLog){
Log.i(defaultTag,msg)
}
}
fun e(msg: String,tag:String =defaultTag) {
if(isPrintLog){
Log.e(defaultTag,msg)
}
}
}
使用RxBinding,需引入
// rxbinding防抖
implementation 'com.jakewharton.rxbinding4:rxbinding:4.0.0'
public class AntiShake {
private static AntiShake instance;
public static AntiShake getInstance() {
if (instance == null) {
synchronized (AntiShake.class) {
if (instance == null) {
instance = new AntiShake();
}
}
}
return instance;
}
/**
* 防抖---防止短时间多次点击,一秒钟之内只取第一个事件
*
* @param view
* @param consumer 防抖后执行的操作
*/
public void setThrottleFirst(View view, Consumer consumer) {
// 监听View点击事件
RxView.clicks(view)
// 一秒钟之内只取第一个事件,防抖操作
.throttleFirst(1, TimeUnit.SECONDS)
.subscribe(consumer);
}
/**
* 防抖---防止短时间多次点击,一秒钟之内只取最后一个事件
*
* @param editText
* @param consumer 防抖后执行的操作
*/
public void setDebounce(EditText editText, Consumer consumer) {
// 监听文本改变事件
RxTextView.textChanges(editText)
// 一秒钟之内只取最后一个文本改变事件,防抖操作
.debounce(1, TimeUnit.SECONDS)
.subscribe(consumer);
}
}
class TimeUtil private constructor() {
companion object {
private var timeUtil: TimeUtil? = null
val instance: TimeUtil?
get() {
if (timeUtil == null) {
synchronized(TimeUtil::class.java) {
if (timeUtil == null) {
timeUtil = TimeUtil()
}
}
}
return timeUtil
}
}
/**
* 获取当前日期
*/
fun getDate() : String{
return getDateFormatInfo().split(" ")[0]
}
/**
* 获取当前星期几
*/
fun getWeek() : String{
return getDateFormatInfo().split(" ")[1]
}
/**
* 获取当前时间
*/
fun getTime() : String{
return getDateFormatInfo().split(" ")[2]
}
/**
* 获取时间信息
*/
fun getDateFormatInfo() : String{
// yyyy-MM-dd 年月日 EEEE 星期 HH:mm:ss 时分秒,大写H代表24小时制,小写为12小时制
return DateFormat.format("yyyy-MM-dd EEEE HH:mm:ss", System.currentTimeMillis()).toString()
}
}
fun FragmentActivity.isExistActivity(context: Context, packageName: String?, className: String?): Boolean {
val intent = Intent()
intent.setClassName(packageName!!, className!!)
return !(context.packageManager.resolveActivity(intent, 0) == null || intent.resolveActivity(context.packageManager) == null || context.packageManager.queryIntentActivities(intent, 0).size == 0)
}
使用
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
var aaa = isExistActivity(this,packageName,javaClass.name)
LogUtils.MyLog.e("${aaa}")
}
}
package com.example.testutils
import android.app.Activity
import android.content.Context
import android.content.Intent
import android.os.Bundle
/**
* 要求最低API为11
* Activity 跳转
* 跳转后Finish之前所有的Activity
*
* @param context Context
* @param goal Activity
*/
/**
* 要求最低API为11
* Activity 跳转
* 跳转后Finish之前所有的Activity
*
* @param context Context
* @param goal Activity
*/
fun Activity.skipActivityAndFinishAll(
context: Context,
goal: Class?,
bundle: Bundle? = null,
) {
val intent = Intent(context, goal)
if (bundle != null) {
intent.putExtras(bundle)
}
intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
context.startActivity(intent)
(context as Activity).finish()
}
使用
package com.example.testutils
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
class MainActivity2 : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main2)
skipActivityAndFinishAll(this,MainActivity3::class.java)
}
}
以上工具类在RxTools的RxAppTool类
以上工具类在RxTools的RxClipboardTool类