王学岗Android工具类集成

来源

1. 屏幕单位转换

/**
 * 屏幕单位转换
 */
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();
    }
}

2. 日志打印工具

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)
        }
    }
}

3 防抖(防止短时间多次点击)

使用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);
    }
}

4. 获取当前时间

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()
    }
}

5 判断是否存在指定Activity

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}")
    }
}

6,跳转后Finish之前所有的Activity

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)
    }
}

7判断App是否是系统应用 isSystemApp

8 卸载App uninstallApp(

9静默卸载App uninstallAppSilent

标题 安装App(支持7.0)

获取App具体设置

获取App名称

获取App图标

获取App路径

获取App版本号

判断App是否是Debug版本

获取App签名

获取应用签名的的SHA1值

判断App是否处于前台

判断App是否安装

得到AppInfo的Bean

获取所有已安装App信息

判断当前App处于前台还是后台

清除App所有数据

以上工具类在RxTools的RxAppTool类

复制文本到剪贴板

获取剪贴板的文本

复制uri到剪贴板

获取剪贴板的uri

复制意图到剪贴板

获取剪贴板的意图

以上工具类在RxTools的RxClipboardTool类

你可能感兴趣的:(随笔,android,javascript,开发语言)