Skip to content

Repository files navigation

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

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

Change log

Use

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

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

APIS (keep updating...)


FragmentActivity.request(vararg permissions:String, callbacks:PermissionsCallbackDSL.() ->Unit)
Activity.startKtxActivity(
flags:Int?=null,
extra:Bundle?=null,
value:Pair<String, Any>?=null,
values:Collection<Pair<String, Any>?>?=null
) fun <reifiedT : 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)
Context.versionName:StringContext.versionCode:LongContext.getAppInfo(apkPath:String):AppInfoContext.getAppInfos(apkFolderPath:String):List<AppInfo>
Context.getAppSignature(packageName:String=this.packageName):ByteArray?Context.isPackageInstalled(pkgName:String)
ByteArray.aesEncrypt(key:ByteArray, iv:ByteArray, cipherAlgotirhm:String=AES_CFB_NOPADDING):ByteArrayByteArray.aesDecrypt(key:ByteArray, iv:ByteArray, cipherAlgotirhm:String=AES_CFB_NOPADDING):ByteArrayFile.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
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):TContext.isRTLLayout
funisOnMainThread()
Drawable.convertToBitmap()
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)
ByteArray.hash(algorithm:Hash):StringString.hash(algorithm:Hash, charset:Charset=Charset.forName("utf-8")):StringByteArray.md5Bytes():ByteArrayByteArray.md5():StringString.md5(charset:Charset=Charset.forName("utf-8")):StringByteArray.sha1Bytes():ByteArrayByteArray.sha1():StringString.sha1(charset:Charset=Charset.forName("utf-8")):StringByteArray.sha224Bytes():ByteArrayByteArray.sha224():StringString.sha224(charset:Charset=Charset.forName("utf-8")):StringByteArray.sha256Bytes():ByteArrayByteArray.sha256():StringString.sha256(charset:Charset=Charset.forName("utf-8")):StringByteArray.sha384Bytes():ByteArrayByteArray.sha384():StringString.sha384(charset:Charset=Charset.forName("utf-8")):StringByteArray.sha512Bytes():ByteArrayByteArray.sha512():StringString.sha512(charset:Charset=Charset.forName("utf-8")):StringFile.hash(algorithm:Hash=Hash.SHA1):String
Context.getAppInfoIntent(packageName:String=this.packageName):IntentContext.goToAppInfoPage(packageName:String=this.packageName)
Context.getDateAndTimeIntent():IntentContext.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?) 
pushActivity(activity:Activity)
popActivity(activity:Activity)
finishCurrentActivity()
finishActivity(activity:Activity)
finishActivity(clazz:Class<*>)
finishAllActivity()
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)
SearchView.queryTextListener(listener:KtxQueryTextLister.() ->Unit)
SeekBar.onProgressBarChanged(callback: (Int, Boolean) ->Unit)
TextView.textWatcher(watcher:KtxTextWatcher.() ->Unit)
ViewPager.onPageSelected(pageChangedAction: (newPosition:Int) ->Unit)
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)
<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
String.areDigitsOnly()
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
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)
ByteArray.toHexString() : 字节数组转十六进制字符串
View.visible()
View.invisible()
View.gone()
View.reverseVisiblity(needGone:Boolean=true)
View.changeVisible(visible:Boolean, needGone:Boolean=true)
varView.isVisible:BooleanvarView.isInvisible:BooleanvarView.isGone:BooleanView.setPadding(@Px size:Int)
View.postDelayed(delayInMillis:Long, crossinline action: () ->Unit):RunnableView.toBitmap(config:Bitmap.Config=Bitmap.Config.ARGB_8888):BitmapRecyclerView.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 : 应用前后台监听

Releases

Packages

Used by

Contributors

Languages