• Stars
    star
    347
  • Rank 122,141 (Top 3 %)
  • Language
    Kotlin
  • License
    Apache License 2.0
  • Created over 5 years ago
  • Updated almost 5 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Kotlin Android Util Code

AndroidUtilCodeKTX ! 专注提升 Android 开发效率 !

该类库利用 Kotlin 语言特性合理封装了 Android 开发中的常用操作,同时也收集了开发过程中的常用工具类。 旨在做同样的事情,写最少的代码,提升开发效率。

Change log

Use

implementation 'luyao.util.ktx:AndroidUtilKTX:0.0.5'

最新版本将第一时间用在我的另外两个开源项目,wanandroidBox,欢迎关注 !

APIS (keep updating...)


权限相关 [Demo]

FragmentActivity.request(vararg permissions: String, callbacks: PermissionsCallbackDSL.() -> Unit)

ActivityExt [Demo]

Activity.startKtxActivity(
    flags: Int? = null,
    extra: Bundle? = null,
    value: Pair<String, Any>? = null,
    values: Collection<Pair<String, Any>?>? = null
) 

fun <reified T : Activity> Activity.startKtxActivityForResult(
    requestCode: Int,
    flags: Int? = null,
    extra: Bundle? = null,
    value: Pair<String, Any>? = null,
    values: Collection<Pair<String, Any>?>? = null
) 

Fragment.startKtxActivity()
Fragment.startKtxActivityForResult()
Context.startKtxActivity
Activity.hideKeyboard()
Activity.showKeyboard(et: EditText)
Activity.hideKeyboard(view: View)

AppExt

Context.versionName: String
Context.versionCode: Long
Context.getAppInfo(apkPath: String): AppInfo
Context.getAppInfos(apkFolderPath: String): List<AppInfo>
Context.getAppSignature(packageName: String = this.packageName): ByteArray?
Context.isPackageInstalled(pkgName: String)

AesExt [Demo]

ByteArray.aesEncrypt(key: ByteArray, iv: ByteArray, cipherAlgotirhm: String = AES_CFB_NOPADDING): ByteArray
ByteArray.aesDecrypt(key: ByteArray, iv: ByteArray, cipherAlgotirhm: String = AES_CFB_NOPADDING): ByteArray 
File.aesEncrypt(key: ByteArray, iv: ByteArray, destFilePath: String): File?, cipherAlgotirhm: String = AES_CFB_NOPADDING)
File.aesDecrypt(key: ByteArray, iv: ByteArray, destFilePath: String): File?, cipherAlgotirhm: String = AES_CFB_NOPADDING)
initAESKey(size: Int): ByteArray
initCipher(mode: Int, key: ByteArray, iv: ByteArray, cipherAlgotirhm: String): Cipher

CommonExt

fromM()
beforeM()
fromN()
beforeN()
fromO()
beforeO()
fromP()
beforeP()
fromSpecificVersion(version: Int)
beforeSpecificVersion(version: Int)
Context.dp2px(dp: Int)
Context.px2dp(px: Int)
View.dp2px(dp: Int)
View.px2dp(px: Int)
Context.screenWidth
Context.screenHeight
Context.copyToClipboard(label: String, text: String)
Context.checkAccessbilityServiceEnabled(serviceName: String)
Any?.notNull(f: () -> T, t: () -> T): T
Context.isRTLLayout

Constants

fun isOnMainThread()

DrawableExt

Drawable.convertToBitmap()

FileExt

File.canListFiles
File.totalSize
File.formatSize
File.mimeType
File.listFiles(isRecursive: Boolean = false, filter: ((file: File) -> Boolean)? = null)
File.writeText(append: Boolean = false, text: String, charset: Charset = Charsets.UTF_8)
File.writeBytes(append: Boolean = false, bytes: ByteArray)
File.moveTo(destFile: File, overwrite: Boolean = true, reserve: Boolean = true)
File.moveToWithProgress(
    destFolder: File,
    overwrite: Boolean = true,
    reserve: Boolean = true,
    func: ((file: File, i: Int) -> Unit)? = null)
File.rename(newName: String)
File.rename(newFile: File)

HashExt [Demo]

ByteArray.hash(algorithm: Hash): String
String.hash(algorithm: Hash, charset: Charset = Charset.forName("utf-8")): String
ByteArray.md5Bytes(): ByteArray
ByteArray.md5(): String
String.md5(charset: Charset = Charset.forName("utf-8")): String
ByteArray.sha1Bytes(): ByteArray
ByteArray.sha1(): String
String.sha1(charset: Charset = Charset.forName("utf-8")): String
ByteArray.sha224Bytes(): ByteArray
ByteArray.sha224(): String
String.sha224(charset: Charset = Charset.forName("utf-8")): String
ByteArray.sha256Bytes(): ByteArray
ByteArray.sha256(): String
String.sha256(charset: Charset = Charset.forName("utf-8")): String
ByteArray.sha384Bytes(): ByteArray
ByteArray.sha384(): String
String.sha384(charset: Charset = Charset.forName("utf-8")): String
ByteArray.sha512Bytes(): ByteArray
ByteArray.sha512(): String
String.sha512(charset: Charset = Charset.forName("utf-8")): String
File.hash(algorithm: Hash = Hash.SHA1): String

IntentExt [Demo]

Context.getAppInfoIntent(packageName: String = this.packageName): Intent
Context.goToAppInfoPage(packageName: String = this.packageName)
Context.getDateAndTimeIntent(): Intent
Context.goToDateAndTimePage()
Context.getLanguageIntent()
Context.goToLanguagePage() 
Context.getInstallIntent(apkFile: File): Intent?
Context.goToAccessibilitySetting()
Context.installApk(apkFile: File)
Context.openBrowser(url: String)
Context.openInAppStore(packageName: String = this.packageName)
Context.openApp(packageName: String)
Context.uninstallApp(packageName: String)
Context.sendEmail(email: String, subject: String?, text: String?) 

KtxManager [Demo]

pushActivity(activity: Activity)
popActivity(activity: Activity)
finishCurrentActivity()
finishActivity(activity: Activity)
 finishActivity(clazz: Class<*>)
finishAllActivity()

KtxSpan [Demo]

text(
    text: CharSequence,
    isNewLine: Boolean = true,
    textSize: Int = -1,
    fontFamily: String = "",
    customTypeFace: Typeface? = null,
    isDp: Boolean = true,
    fontProportion: Float = -1f,
    xFontProportion: Float = -1f,
    lineHeight: Int = -1,
    foregroundColor: Int = -1,
    backgroundColor: Int = -1,
    alignment: Layout.Alignment? = null,
    isBold: Boolean = false,
    isStrikethrough: Boolean = false,
    isUnderline: Boolean = false,
    isItalic: Boolean = false,
    isBoldAndItalic: Boolean = false,
    isSuperscript: Boolean = false,
    isSubscript: Boolean = false,
    first: Int = 0,
    rest: Int = 0,
    quoteColor: Int = -1,
    quoteStripeWidth: Int = STANDARD_STRIPE_WIDTH_PX,
    quoteGapWidth: Int = STANDARD_GAP_WIDTH_PX,
    bulletColor: Int = -1,
    bulletRadius: Int = STANDARD_BULLET_RADIUS,
    bulletGapWidth: Int = STANDARD_GAP_WIDTH_PX,
    clickSpan: ClickableSpan? = null,
    url: String? = null,
    blurRadius: Float = -1f,
    blurStyle: BlurMaskFilter.Blur = BlurMaskFilter.Blur.NORMAL
): KtxSpan 
    
image(
    resId: Int,
    verticalAlignment: Int = KtxImageSpan.ALIGN_MIDDLE,
    marginLeft: Int = 0,
    marginRight: Int = 0,
    offsetY: Int = 0,
    fontWidthMultiple: Float = -1f
) 

blockLine(@Px height: Int, addBlockAlways: Boolean = false)

Listener [Demo]

SearchView.queryTextListener(listener: KtxQueryTextLister.() -> Unit)
SeekBar.onProgressBarChanged(callback: (Int, Boolean) -> Unit)
TextView.textWatcher(watcher: KtxTextWatcher.() -> Unit)
ViewPager.onPageSelected(pageChangedAction: (newPosition: Int) -> Unit)

LogExt

String.logv(tag: String = TAG)
String.logd(tag: String = TAG)
String.logi(tag: String = TAG)
String.logw(tag: String = TAG)
String.loge(tag: String = TAG)

SharedPreferencesExt [Demo]

<T> Context.putSpValue(key: String, value: T, name: String = packageName)
<T> Activity.putSpValue(key: String, value: T, name: String = packageName)
<T> Context.getSpValue(key: String, default: T, name: String = packageName ): T
<T> Activity.getSpValue(key: String, default: T, name: String = packageName): T

StringExt

String.areDigitsOnly()

SystemServiceExt

Context.windowManager
Context.clipboardManager
Context.layoutInflater
Context.activityManager
Context.powerManager
Context.alarmManager
Context.notificationManager
Context.keyguardManager
Context.locationManager
Context.searchManager
Context.storageManager
Context.vibrator
Context.connectivityManager
Context.wifiManager
Context.audioManager
Context.mediaRouter
Context.telephonyManager
Context.sensorManager
Context.subscriptionManager
Context.carrierConfigManager
Context.inputMethodManager
Context.uiModeManager
Context.downloadManager
Context.batteryManager
Context.jobScheduler
Context.accessibilityManager

ToastExt [Demo]

Context.toast(content: String, duration: Int = Toast.LENGTH_SHORT)
Context.toast(@StringRes id: Int, duration: Int = Toast.LENGTH_SHORT)
Context.longToast(content: String)
Context.longToast(@StringRes id: Int)
Any.toast(context: Context, content: String, duration: Int = Toast.LENGTH_SHORT)
Any.toast(context: Context, @StringRes id: Int, duration: Int=Toast.LENGTH_SHORT) 
Any.longToast(context: Context, content: String)
Any.longToast(context: Context, @StringRes id: Int)

TransformExt

ByteArray.toHexString() : 字节数组转十六进制字符串

ViewExt

View.visible()
View.invisible()
View.gone()
View.reverseVisiblity(needGone: Boolean = true)
View.changeVisible(visible: Boolean, needGone: Boolean = true)
var View.isVisible: Boolean
var View.isInvisible: Boolean
var View.isGone: Boolean
View.setPadding(@Px size: Int)
View.postDelayed(delayInMillis: Long, crossinline action: () -> Unit): Runnable
View.toBitmap(config: Bitmap.Config = Bitmap.Config.ARGB_8888): Bitmap
RecyclerView.itemPadding(padding:Int)
RecyclerView.itemPadding(top: Int, bottom: Int, left: Int = 0, right: Int = 0)
TextView.notEmpty(f: TextView.() -> Unit, t: TextView.() -> Unit)
View.onGlobalLayout(crossinline callback: () -> Unit)
fun View.afterMeasured(crossinline callback: View.() -> Unit)

Others

  1. KtxHandler : 跟随组件生命周期自动处理的 Handler
  2. KtxAppLifeObserver : 应用前后台监听