{"id":21721143,"url":"https://github.com/lulululbj/androidutilcodektx","last_synced_at":"2025-09-07T01:32:36.847Z","repository":{"id":98489423,"uuid":"189544240","full_name":"lulululbj/AndroidUtilCodeKTX","owner":"lulululbj","description":"Kotlin Android Util Code","archived":false,"fork":false,"pushed_at":"2019-12-09T08:37:28.000Z","size":9455,"stargazers_count":348,"open_issues_count":4,"forks_count":35,"subscribers_count":6,"default_branch":"master","last_synced_at":"2025-05-20T11:07:05.802Z","etag":null,"topics":["android","kotlin","kotlin-library","ktx","utils"],"latest_commit_sha":null,"homepage":"https://juejin.im/post/5d2adf215188252b13288942","language":"Kotlin","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/lulululbj.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-05-31T06:58:56.000Z","updated_at":"2025-05-06T07:02:33.000Z","dependencies_parsed_at":null,"dependency_job_id":"f1122963-a992-4033-b44e-f84ef841a61b","html_url":"https://github.com/lulululbj/AndroidUtilCodeKTX","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/lulululbj/AndroidUtilCodeKTX","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lulululbj%2FAndroidUtilCodeKTX","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lulululbj%2FAndroidUtilCodeKTX/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lulululbj%2FAndroidUtilCodeKTX/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lulululbj%2FAndroidUtilCodeKTX/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/lulululbj","download_url":"https://codeload.github.com/lulululbj/AndroidUtilCodeKTX/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lulululbj%2FAndroidUtilCodeKTX/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":273986612,"owners_count":25202704,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-06T02:00:13.247Z","response_time":2576,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["android","kotlin","kotlin-library","ktx","utils"],"created_at":"2024-11-26T02:14:11.466Z","updated_at":"2025-09-07T01:32:36.819Z","avatar_url":"https://github.com/lulululbj.png","language":"Kotlin","readme":"\n**AndroidUtilCodeKTX ! 专注提升 Android 开发效率 ！**\n\n该类库利用 Kotlin 语言特性合理封装了 Android 开发中的常用操作，同时也收集了开发过程中的常用工具类。\n旨在做同样的事情，写最少的代码，提升开发效率。\n\n[**Change log**](/CHANGELOG.md)\n\n## Use\n\n```\nimplementation 'luyao.util.ktx:AndroidUtilKTX:0.0.5'\n```\n\n\u003e 最新版本将第一时间用在我的另外两个开源项目，[wanandroid](https://github.com/lulululbj/wanandroid) 和 [Box](https://github.com/lulululbj/Box)，欢迎关注 ！\n\n\n## APIS (keep updating...)\n\n***\n\n### [权限相关](https://github.com/lulululbj/AndroidUtilCodeKTX/blob/master/ktx/src/main/java/luyao/util/ktx/ext/permission/PermissionExt.kt)  [[Demo]](https://github.com/lulululbj/AndroidUtilCodeKTX/blob/master/app/src/main/java/luyao/util/ktx/ui/PermissionExtActivity.kt)\n\n```kotlin\nFragmentActivity.request(vararg permissions: String, callbacks: PermissionsCallbackDSL.() -\u003e Unit)\n```\n\n### [ActivityExt](/ktx/src/main/java/luyao/util/ktx/ext/ActivityExt.kt) [[Demo]](/app/src/main/java/luyao/util/ktx/ui/ActivityExtActivity.kt)\n\n```kotlin\nActivity.startKtxActivity(\n    flags: Int? = null,\n    extra: Bundle? = null,\n    value: Pair\u003cString, Any\u003e? = null,\n    values: Collection\u003cPair\u003cString, Any\u003e?\u003e? = null\n) \n\nfun \u003creified T : Activity\u003e Activity.startKtxActivityForResult(\n    requestCode: Int,\n    flags: Int? = null,\n    extra: Bundle? = null,\n    value: Pair\u003cString, Any\u003e? = null,\n    values: Collection\u003cPair\u003cString, Any\u003e?\u003e? = null\n) \n\nFragment.startKtxActivity()\nFragment.startKtxActivityForResult()\nContext.startKtxActivity\nActivity.hideKeyboard()\nActivity.showKeyboard(et: EditText)\nActivity.hideKeyboard(view: View)\n```\n\n### [AppExt](https://github.com/lulululbj/AndroidUtilCodeKTX/blob/master/ktx/src/main/java/luyao/util/ktx/ext/AppExt.kt)\n\n```kotlin\nContext.versionName: String\nContext.versionCode: Long\nContext.getAppInfo(apkPath: String): AppInfo\nContext.getAppInfos(apkFolderPath: String): List\u003cAppInfo\u003e\nContext.getAppSignature(packageName: String = this.packageName): ByteArray?\nContext.isPackageInstalled(pkgName: String)\n```\n\n### [AesExt](https://github.com/lulululbj/AndroidUtilCodeKTX/blob/master/ktx/src/main/java/luyao/util/ktx/ext/AesExt.kt)  [[Demo]](https://github.com/lulululbj/AndroidUtilCodeKTX/blob/master/ktx/src/test/java/luyao/util/ktx/ext/AesExtKtTest.kt)\n\n```kotlin\nByteArray.aesEncrypt(key: ByteArray, iv: ByteArray, cipherAlgotirhm: String = AES_CFB_NOPADDING): ByteArray\nByteArray.aesDecrypt(key: ByteArray, iv: ByteArray, cipherAlgotirhm: String = AES_CFB_NOPADDING): ByteArray \nFile.aesEncrypt(key: ByteArray, iv: ByteArray, destFilePath: String): File?, cipherAlgotirhm: String = AES_CFB_NOPADDING)\nFile.aesDecrypt(key: ByteArray, iv: ByteArray, destFilePath: String): File?, cipherAlgotirhm: String = AES_CFB_NOPADDING)\ninitAESKey(size: Int): ByteArray\ninitCipher(mode: Int, key: ByteArray, iv: ByteArray, cipherAlgotirhm: String): Cipher\n```\n\n### [CommonExt](https://github.com/lulululbj/AndroidUtilCodeKTX/blob/master/ktx/src/main/java/luyao/util/ktx/ext/CommonExt.kt)\n\n```kotlin\nfromM()\nbeforeM()\nfromN()\nbeforeN()\nfromO()\nbeforeO()\nfromP()\nbeforeP()\nfromSpecificVersion(version: Int)\nbeforeSpecificVersion(version: Int)\nContext.dp2px(dp: Int)\nContext.px2dp(px: Int)\nView.dp2px(dp: Int)\nView.px2dp(px: Int)\nContext.screenWidth\nContext.screenHeight\nContext.copyToClipboard(label: String, text: String)\nContext.checkAccessbilityServiceEnabled(serviceName: String)\nAny?.notNull(f: () -\u003e T, t: () -\u003e T): T\nContext.isRTLLayout\n```\n\n### [Constants](/ktx/src/main/java/luyao/util/ktx/core/Constants.kt)\n\n```kotlin\nfun isOnMainThread()\n```\n\n### [DrawableExt](/ktx/src/main/java/luyao/util/ktx/ext/DrawableExt.kt)\n\n```kotlin\nDrawable.convertToBitmap()\n```\n\n### [FileExt](/ktx/src/main/java/luyao/util/ktx/ext/FileExt.kt)\n\n```kotlin\nFile.canListFiles\nFile.totalSize\nFile.formatSize\nFile.mimeType\nFile.listFiles(isRecursive: Boolean = false, filter: ((file: File) -\u003e Boolean)? = null)\nFile.writeText(append: Boolean = false, text: String, charset: Charset = Charsets.UTF_8)\nFile.writeBytes(append: Boolean = false, bytes: ByteArray)\nFile.moveTo(destFile: File, overwrite: Boolean = true, reserve: Boolean = true)\nFile.moveToWithProgress(\n    destFolder: File,\n    overwrite: Boolean = true,\n    reserve: Boolean = true,\n    func: ((file: File, i: Int) -\u003e Unit)? = null)\nFile.rename(newName: String)\nFile.rename(newFile: File)\n```\n\n### [HashExt](https://github.com/lulululbj/AndroidUtilCodeKTX/blob/master/ktx/src/main/java/luyao/util/ktx/ext/HashExt.kt) [[Demo]](https://github.com/lulululbj/AndroidUtilCodeKTX/blob/master/ktx/src/test/java/luyao/util/ktx/ext/HashExtKtTest.kt)\n\n```kotlin\nByteArray.hash(algorithm: Hash): String\nString.hash(algorithm: Hash, charset: Charset = Charset.forName(\"utf-8\")): String\nByteArray.md5Bytes(): ByteArray\nByteArray.md5(): String\nString.md5(charset: Charset = Charset.forName(\"utf-8\")): String\nByteArray.sha1Bytes(): ByteArray\nByteArray.sha1(): String\nString.sha1(charset: Charset = Charset.forName(\"utf-8\")): String\nByteArray.sha224Bytes(): ByteArray\nByteArray.sha224(): String\nString.sha224(charset: Charset = Charset.forName(\"utf-8\")): String\nByteArray.sha256Bytes(): ByteArray\nByteArray.sha256(): String\nString.sha256(charset: Charset = Charset.forName(\"utf-8\")): String\nByteArray.sha384Bytes(): ByteArray\nByteArray.sha384(): String\nString.sha384(charset: Charset = Charset.forName(\"utf-8\")): String\nByteArray.sha512Bytes(): ByteArray\nByteArray.sha512(): String\nString.sha512(charset: Charset = Charset.forName(\"utf-8\")): String\nFile.hash(algorithm: Hash = Hash.SHA1): String\n```\n\n### [IntentExt](https://github.com/lulululbj/AndroidUtilCodeKTX/blob/master/ktx/src/main/java/luyao/util/ktx/ext/IntentExt.kt)  [[Demo]](https://github.com/lulululbj/AndroidUtilCodeKTX/blob/master/app/src/main/java/luyao/util/ktx/ui/IntentExtActivity.kt)\n\n```kotlin\nContext.getAppInfoIntent(packageName: String = this.packageName): Intent\nContext.goToAppInfoPage(packageName: String = this.packageName)\nContext.getDateAndTimeIntent(): Intent\nContext.goToDateAndTimePage()\nContext.getLanguageIntent()\nContext.goToLanguagePage() \nContext.getInstallIntent(apkFile: File): Intent?\nContext.goToAccessibilitySetting()\nContext.installApk(apkFile: File)\nContext.openBrowser(url: String)\nContext.openInAppStore(packageName: String = this.packageName)\nContext.openApp(packageName: String)\nContext.uninstallApp(packageName: String)\nContext.sendEmail(email: String, subject: String?, text: String?) \n```\n\n### [KtxManager](/ktx/src/main/java/luyao/util/ktx/core/lifecycle/KtxHandler.kt) [[Demo]](/app/src/main/java/luyao/util/ktx/ui/LifeCycleActivity.kt)\n\n```kotlin\npushActivity(activity: Activity)\npopActivity(activity: Activity)\nfinishCurrentActivity()\nfinishActivity(activity: Activity)\n finishActivity(clazz: Class\u003c*\u003e)\nfinishAllActivity()\n```\n\n### [KtxSpan](/ktx/src/main/java/luyao/util/ktx/core/span/KtxSpan.kt) [[Demo]](/app/src/main/java/luyao/util/ktx/ui/KtxSpanActivity.kt)\n\n```kotlin\ntext(\n    text: CharSequence,\n    isNewLine: Boolean = true,\n    textSize: Int = -1,\n    fontFamily: String = \"\",\n    customTypeFace: Typeface? = null,\n    isDp: Boolean = true,\n    fontProportion: Float = -1f,\n    xFontProportion: Float = -1f,\n    lineHeight: Int = -1,\n    foregroundColor: Int = -1,\n    backgroundColor: Int = -1,\n    alignment: Layout.Alignment? = null,\n    isBold: Boolean = false,\n    isStrikethrough: Boolean = false,\n    isUnderline: Boolean = false,\n    isItalic: Boolean = false,\n    isBoldAndItalic: Boolean = false,\n    isSuperscript: Boolean = false,\n    isSubscript: Boolean = false,\n    first: Int = 0,\n    rest: Int = 0,\n    quoteColor: Int = -1,\n    quoteStripeWidth: Int = STANDARD_STRIPE_WIDTH_PX,\n    quoteGapWidth: Int = STANDARD_GAP_WIDTH_PX,\n    bulletColor: Int = -1,\n    bulletRadius: Int = STANDARD_BULLET_RADIUS,\n    bulletGapWidth: Int = STANDARD_GAP_WIDTH_PX,\n    clickSpan: ClickableSpan? = null,\n    url: String? = null,\n    blurRadius: Float = -1f,\n    blurStyle: BlurMaskFilter.Blur = BlurMaskFilter.Blur.NORMAL\n): KtxSpan \n    \nimage(\n    resId: Int,\n    verticalAlignment: Int = KtxImageSpan.ALIGN_MIDDLE,\n    marginLeft: Int = 0,\n    marginRight: Int = 0,\n    offsetY: Int = 0,\n    fontWidthMultiple: Float = -1f\n) \n\nblockLine(@Px height: Int, addBlockAlways: Boolean = false)\n```\n\n### [Listener](/ktx/src/main/java/luyao/util/ktx/ext/listener) [[Demo]](/app/src/main/java/luyao/util/ktx/ui/ListenerExtActivity.kt)\n\n```kotlin\nSearchView.queryTextListener(listener: KtxQueryTextLister.() -\u003e Unit)\nSeekBar.onProgressBarChanged(callback: (Int, Boolean) -\u003e Unit)\nTextView.textWatcher(watcher: KtxTextWatcher.() -\u003e Unit)\nViewPager.onPageSelected(pageChangedAction: (newPosition: Int) -\u003e Unit)\n```\n\n### [LogExt](https://github.com/lulululbj/AndroidUtilCodeKTX/blob/master/ktx/src/main/java/luyao/util/ktx/ext/LogExt.kt)\n\n```kotlin\nString.logv(tag: String = TAG)\nString.logd(tag: String = TAG)\nString.logi(tag: String = TAG)\nString.logw(tag: String = TAG)\nString.loge(tag: String = TAG)\n```\n\n### [SharedPreferencesExt](https://github.com/lulululbj/AndroidUtilCodeKTX/blob/master/ktx/src/main/java/luyao/util/ktx/ext/sharedpreferences/SharedPreferencesExt.kt) [[Demo]](https://github.com/lulululbj/AndroidUtilCodeKTX/blob/master/app/src/main/java/luyao/util/ktx/ui/SharedPreferencesActivity.kt)\n\n```kotlin\n\u003cT\u003e Context.putSpValue(key: String, value: T, name: String = packageName)\n\u003cT\u003e Activity.putSpValue(key: String, value: T, name: String = packageName)\n\u003cT\u003e Context.getSpValue(key: String, default: T, name: String = packageName ): T\n\u003cT\u003e Activity.getSpValue(key: String, default: T, name: String = packageName): T\n```\n\n### [StringExt](/ktx/src/main/java/luyao/util/ktx/ext/StringExt.kt)\n\n```kotlin\nString.areDigitsOnly()\n```\n\n### [SystemServiceExt](https://github.com/lulululbj/AndroidUtilCodeKTX/blob/master/ktx/src/main/java/luyao/util/ktx/ext/SystemServiceExt.kt)\n\n```kotlin\nContext.windowManager\nContext.clipboardManager\nContext.layoutInflater\nContext.activityManager\nContext.powerManager\nContext.alarmManager\nContext.notificationManager\nContext.keyguardManager\nContext.locationManager\nContext.searchManager\nContext.storageManager\nContext.vibrator\nContext.connectivityManager\nContext.wifiManager\nContext.audioManager\nContext.mediaRouter\nContext.telephonyManager\nContext.sensorManager\nContext.subscriptionManager\nContext.carrierConfigManager\nContext.inputMethodManager\nContext.uiModeManager\nContext.downloadManager\nContext.batteryManager\nContext.jobScheduler\nContext.accessibilityManager\n```\n\n### [ToastExt](https://github.com/lulululbj/AndroidUtilCodeKTX/blob/master/ktx/src/main/java/luyao/util/ktx/ext/ToastExt.kt) [[Demo]](https://github.com/lulululbj/AndroidUtilCodeKTX/blob/master/app/src/main/java/luyao/util/ktx/ui/ToastExtActivity.kt)\n\n```kotlin\nContext.toast(content: String, duration: Int = Toast.LENGTH_SHORT)\nContext.toast(@StringRes id: Int, duration: Int = Toast.LENGTH_SHORT)\nContext.longToast(content: String)\nContext.longToast(@StringRes id: Int)\nAny.toast(context: Context, content: String, duration: Int = Toast.LENGTH_SHORT)\nAny.toast(context: Context, @StringRes id: Int, duration: Int=Toast.LENGTH_SHORT) \nAny.longToast(context: Context, content: String)\nAny.longToast(context: Context, @StringRes id: Int)\n```\n\n### [TransformExt](https://github.com/lulululbj/AndroidUtilCodeKTX/blob/master/ktx/src/main/java/luyao/util/ktx/ext/TransformExt.kt)\n\n```kotlin\nByteArray.toHexString() : 字节数组转十六进制字符串\n```\n\n### [ViewExt](https://github.com/lulululbj/AndroidUtilCodeKTX/blob/master/ktx/src/main/java/luyao/util/ktx/ext/ViewExt.kt)\n\n```kotlin\nView.visible()\nView.invisible()\nView.gone()\nView.reverseVisiblity(needGone: Boolean = true)\nView.changeVisible(visible: Boolean, needGone: Boolean = true)\nvar View.isVisible: Boolean\nvar View.isInvisible: Boolean\nvar View.isGone: Boolean\nView.setPadding(@Px size: Int)\nView.postDelayed(delayInMillis: Long, crossinline action: () -\u003e Unit): Runnable\nView.toBitmap(config: Bitmap.Config = Bitmap.Config.ARGB_8888): Bitmap\nRecyclerView.itemPadding(padding:Int)\nRecyclerView.itemPadding(top: Int, bottom: Int, left: Int = 0, right: Int = 0)\nTextView.notEmpty(f: TextView.() -\u003e Unit, t: TextView.() -\u003e Unit)\nView.onGlobalLayout(crossinline callback: () -\u003e Unit)\nfun View.afterMeasured(crossinline callback: View.() -\u003e Unit)\n```\n\n### Others\n\n1. [KtxHandler](/ktx/src/main/java/luyao/util/ktx/core/lifecycle/KtxHandler.kt) : 跟随组件生命周期自动处理的 Handler\n2. [KtxAppLifeObserver](/ktx/src/main/java/luyao/util/ktx/core/lifecycle/KtxAppLifeObserver.kt) : 应用前后台监听\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flulululbj%2Fandroidutilcodektx","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flulululbj%2Fandroidutilcodektx","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flulululbj%2Fandroidutilcodektx/lists"}