AndroidKTX一个简化Android开发的Kotlin工具类集合,通过Kotlin语法特性封装一些好用的方法和功能,可以使代码更加简洁易读,从而有效的提高开发效率。
引入Gradle:在Project的build.gradle里面添加远程仓库allprojects{repositories{//...mavenCentral()}}在Module的build.gradle里面添加引入依赖项//core-ktx(*必须)implementation'com.github.jenly1314.AndroidKTX:core-ktx:1.0.0'//activity-ktx(可选)implementation'com.github.jenly1314.AndroidKTX:activity-ktx:1.0.0'//fragment-ktx(可选)implementation'com.github.jenly1314.AndroidKTX:fragment-ktx:1.0.0'示例下面介绍一些部分常用的功能:ActivityResultCaller的 ActivityResultLauncher 使用示例(常在 Activity 或 Fragment 中使用)//单个权限申请:只需在需要使用的地方调用:cameraPermissionLauncher.launch()即可触发回调privatevalcameraPermissionLauncher=requestPermissionLauncher(Manifest.permission.CAMERA){granted->showToast("granted=$granted")log(msg="granted=$granted")if(granted){//已授权,则进行拍照预览picturePreviewLauncher.launch()}}//多个权限申请:只需在需要使用的地方调用:readWritePermissionLauncher.launch()即可触发回调privatevalreadWritePermissionLauncher=requestMultiplePermissionsLauncher(arrayOf(Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE)){allGranted,grantedPermissions,deniedPermissions->showToast("allGranted=$allGranted")log(msg="allGranted=$allGranted,grantedPermissions=$grantedPermissions,deniedPermissions=$deniedPermissions")if(allGranted){//已全部授权,则进行选择文件documentLauncher.launch()}}//拍照预览privatevalpicturePreviewLauncher=takePicturePreviewLauncher{binding.iv.setImageBitmap(it)}//选择文件(类型:image/*)privatevaldocumentLauncher=openDocumentLauncher(arrayOf("image/*")){binding.iv.setImageURI(it)}//startActivityForResult:只需在需要使用的地方调用:startActivityLauncher.launch(intent)即可触发回调privatevalstartActivityLauncher=startActivityForResultLauncher{log(msg="resultCode=${it.resultCode}")if(it.isResultOk()){//成功showToast("ResultOk")}else{showToast("ResultCancel")}} 然后通过申明的 XXXLauncher 调用函数 launch 即可//如:cameraPermissionLaunchercameraPermissionLauncher.launch() //如:startActivityLauncherstartActivityLauncher.launch(intentOf(SampleActivity::class.java,"key1"to2,"key2"to"StartActivityForResult")) startActivity 使用示例(常在 Activity 或 Fragment 中使用)//相当于startActivity(Intent(this,MainActivity::class.java))startActivity<MainActivity>() 或//相当于startActivity(Intent(this,MainActivity::class.java))startActivity(MainActivity::class.java) 或(带传递参数)//相当于startActivity(Intent(this,MainActivity::class.java).putExtra("key1",1).putExtra("key2","StartActivity")startActivity(SampleActivity::class.java,"key1"to1,"key2"to"StartActivity") 然后在跳转后的界面接收数据classSampleActivity:AppCompatActivity(R.layout.activity_sample){//懒加载:相当于懒加载的方式获取getIntent().getExtras().get("key1");类型为:Int(有默认值,可保证不为空,并通过默认值的类型可自动推断出变量的类型)privatevalextra1bylazyIntentExtra("key1",0)//属性委托:相当于getIntent().getExtras().get("key2");类型为:String(有默认值,可保证不为空)privatevalextra2byintentExtra("key2","")} Intent的 intentExtra 使用示例(常在 Activity 中使用)//属性委托:相当于getIntent().getExtras().get("extra1");类型为:Int?privatevalextra1:Int?byintentExtra<Int>("extra1")//属性委托:相当于getIntent().getExtras().get("extra2");类型为:Int?(有申明类型时,可以省略泛型)privatevalextra2:Int?byintentExtra("extra2")//属性委托:相当于getIntent().getExtras().get("extra3");类型为:Int?(有声明泛型时,可以省略类型)privatevalextra3byintentExtra<Int>("extra3")//属性委托:相当于getIntent().getExtras().get("extra4");类型为:Int(有默认值,可保证不为空)privatevalextra4:IntbyintentExtra("extra4",1)//属性委托:相当于getIntent().getExtras().get("extra5");类型为:Int(有默认值,通过默认值的类型可自动推断出变量的类型)privatevalextra5byintentExtra("extra5",1)//属性委托:相当于getIntent().getExtras().get("extra6");类型为:Int(key的默认值如果忽略或为空时,则默认值为变量的名称)privatevalextra6byintentExtra(defaultValue=1)//属性委托:相当于懒加载的方式获取getIntent().getExtras().get("extra7");类型为:Int?privatevalextra7:Int?byintentExtra()//懒加载:相当于懒加载的方式获取getIntent().getExtras().get("extra8");类型为:Int?privatevalextra8:Int?bylazyIntentExtra("extra8")//懒加载:相当于懒加载的方式获取getIntent().getExtras().get("extra9");类型为:Int(有默认值,可保证不为空,并通过默认值的类型可自动推断出变量的类型)privatevalextra9bylazyIntentExtra("extra9",1) Fragment的 argument 使用示例(常在 Fragment 中使用)//属性委托:相当于fragment.getArguments().get("arg1");类型为:Int?privatevalarg1:Int?byargument<Int>("arg1")//属性委托:相当于fragment.getArguments().get("arg2");类型为:Int?(有申明类型时,可以省略泛型)privatevalarg2:Int?byargument("arg2")//属性委托:相当于fragment.getArguments().get("arg3");类型为:Int?(有声明泛型时,可以省略类型)privatevalarg3byargument<Int>("arg3")//属性委托:相当于fragment.getArguments().get("arg4");类型为:Int(有默认值,可保证不为空)privatevalarg4:Intbyargument("arg4",1)//属性委托:相当于fragment.getArguments().get("arg5");类型为:Int(有默认值,通过默认值的类型可自动推断出变量的类型)privatevalarg5byargument("arg5",1)//属性委托:相当于fragment.getArguments().get("arg6");类型为:Int(key的默认值如果忽略或为空时,则默认值为变量的名称)privatevalarg6byargument(defaultValue=1)//属性委托:相当于懒加载的方式获取fragment.getArguments().get("arg7");类型为:Int?privatevalarg7:Int?byargument()//懒加载:相当于懒加载的方式获取fragment.getArguments().get("arg8");类型为:Int?privatevalarg8:Int?bylazyArgument("arg8")//懒加载:相当于懒加载的方式获取fragment.getArguments().get("arg9");类型为:Int(有默认值,可保证不为空,并通过默认值的类型可自动推断出变量的类型)privatevalarg9bylazyArgument("arg9",1) argument 主要使用场景示例classSampleFragment:Fragment(){//属性委托的方式传递参数privatevarargIntbyargument(defaultValue=0)privatevarargString:String?byargument()privatevarargBoolbyargument(defaultValue=false)companionobject{funnewInstance(argInt:Int,argString:String,isBool:Boolean):SampleFragment{returnSampleFragment().apply{//示例:属性委托的方式传递参数this.argInt=argIntthis.argString=argStringthis.argBool=isBool}点击空白处退出提示
评论