Jenly-AndroidKTXKotlin 工具类集合
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() 即可触发回调 private val cameraPermissionLauncher = requestPermissionLauncher(Manifest.permission.CAMERA) { granted -> showToast("granted = $granted") log(msg = "granted = $granted") if (granted) { // 已授权,则进行拍照预览 picturePreviewLauncher.launch() } } // 多个权限申请:只需在需要使用的地方调用:readWritePermissionLauncher.launch() 即可触发回调 private val readWritePermissionLauncher = 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() } } // 拍照预览 private val picturePreviewLauncher = takePicturePreviewLauncher{ binding.iv.setImageBitmap(it) } // 选择文件 (类型:image/*) private val documentLauncher = openDocumentLauncher(arrayOf("image/*")){ binding.iv.setImageURI(it) } // startActivityForResult:只需在需要使用的地方调用:startActivityLauncher.launch(intent) 即可触发回调 private val startActivityLauncher = startActivityForResultLauncher{ log(msg = "resultCode = ${it.resultCode}") if(it.isResultOk()){ // 成功 showToast("Result Ok") }else{ showToast("Result Cancel") } }
然后通过申明的 XXXLauncher 调用函数 launch 即可
// 如:cameraPermissionLauncher cameraPermissionLauncher.launch()
//如:startActivityLauncher startActivityLauncher.launch( intentOf( SampleActivity::class.java, "key1" to 2, "key2" to "Start Activity For Result" ) )
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", "Start Activity") startActivity(SampleActivity::class.java, "key1" to 1, "key2" to "Start Activity")
然后在跳转后的界面接收数据
class SampleActivity : AppCompatActivity(R.layout.activity_sample) { // 懒加载:相当于懒加载的方式获取 getIntent().getExtras().get("key1"); 类型为:Int(有默认值,可保证不为空,并通过默认值的类型可自动推断出变量的类型) private val extra1 by lazyIntentExtra("key1", 0) // 属性委托:相当于 getIntent().getExtras().get("key2"); 类型为:String(有默认值,可保证不为空) private val extra2 by intentExtra("key2", "") }
Intent 的 intentExtra 使用示例(常在 Activity 中使用)
// 属性委托:相当于 getIntent().getExtras().get("extra1"); 类型为:Int? private val extra1: Int? by intentExtra<Int>("extra1") // 属性委托:相当于 getIntent().getExtras().get("extra2"); 类型为:Int?(有申明类型时,可以省略泛型) private val extra2: Int? by intentExtra("extra2") // 属性委托:相当于 getIntent().getExtras().get("extra3"); 类型为:Int?(有声明泛型时,可以省略类型) private val extra3 by intentExtra<Int>("extra3") // 属性委托:相当于 getIntent().getExtras().get("extra4"); 类型为:Int(有默认值,可保证不为空) private val extra4: Int by intentExtra("extra4", 1) // 属性委托:相当于 getIntent().getExtras().get("extra5"); 类型为:Int(有默认值,通过默认值的类型可自动推断出变量的类型) private val extra5 by intentExtra("extra5", 1) // 属性委托:相当于 getIntent().getExtras().get("extra6"); 类型为:Int(key的默认值如果忽略或为空时,则默认值为变量的名称) private val extra6 by intentExtra(defaultValue = 1) // 属性委托:相当于懒加载的方式获取 getIntent().getExtras().get("extra7"); 类型为:Int? private val extra7: Int? by intentExtra() // 懒加载:相当于懒加载的方式获取 getIntent().getExtras().get("extra8"); 类型为:Int? private val extra8: Int? by lazyIntentExtra("extra8") // 懒加载:相当于懒加载的方式获取 getIntent().getExtras().get("extra9"); 类型为:Int(有默认值,可保证不为空,并通过默认值的类型可自动推断出变量的类型) private val extra9 by lazyIntentExtra("extra9", 1)
Fragment 的 argument 使用示例(常在 Fragment 中使用)
// 属性委托:相当于 fragment.getArguments().get("arg1"); 类型为:Int? private val arg1: Int? by argument<Int>("arg1") // 属性委托:相当于 fragment.getArguments().get("arg2"); 类型为:Int?(有申明类型时,可以省略泛型) private val arg2: Int? by argument("arg2") // 属性委托:相当于 fragment.getArguments().get("arg3"); 类型为:Int?(有声明泛型时,可以省略类型) private val arg3 by argument<Int>("arg3") // 属性委托:相当于 fragment.getArguments().get("arg4"); 类型为:Int(有默认值,可保证不为空) private val arg4: Int by argument("arg4", 1) // 属性委托:相当于 fragment.getArguments().get("arg5"); 类型为:Int(有默认值,通过默认值的类型可自动推断出变量的类型) private val arg5 by argument("arg5", 1) // 属性委托:相当于 fragment.getArguments().get("arg6"); 类型为:Int(key的默认值如果忽略或为空时,则默认值为变量的名称) private val arg6 by argument(defaultValue = 1) // 属性委托:相当于懒加载的方式获取 fragment.getArguments().get("arg7"); 类型为:Int? private val arg7: Int? by argument() // 懒加载:相当于懒加载的方式获取 fragment.getArguments().get("arg8"); 类型为:Int? private val arg8: Int? by lazyArgument("arg8") // 懒加载:相当于懒加载的方式获取 fragment.getArguments().get("arg9"); 类型为:Int(有默认值,可保证不为空,并通过默认值的类型可自动推断出变量的类型) private val arg9 by lazyArgument("arg9", 1)
argument 主要使用场景示例
class SampleFragment : Fragment() { // 属性委托的方式传递参数 private var argInt by argument(defaultValue = 0) private var argString: String? by argument() private var argBool by argument(defaultValue = false) companion object { fun newInstance(argInt: Int, argString: String, isBool: Boolean): SampleFragment { return SampleFragment().apply { // 示例:属性委托的方式传递参数 this.argInt = argInt this.argString = argString this.argBool = isBool } } } //... }
评论