Jenly-AndroidKTXKotlin 工具類集合
AndroidKTX 一個簡化 Android 開發(fā)的 Kotlin 工具類集合,通過 Kotlin 語法特性封裝一些好用的方法和功能,可以使代碼更加簡潔易讀,從而有效的提高開發(fā)效率。
引入
Gradle:
- 在Project的 build.gradle 里面添加遠(yuǎn)程倉庫
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 中使用)
// 單個權(quán)限申請:只需在需要使用的地方調(diào)用:cameraPermissionLauncher.launch() 即可觸發(fā)回調(diào) private val cameraPermissionLauncher = requestPermissionLauncher(Manifest.permission.CAMERA) { granted -> showToast("granted = $granted") log(msg = "granted = $granted") if (granted) { // 已授權(quán),則進(jìn)行拍照預(yù)覽 picturePreviewLauncher.launch() } } // 多個權(quán)限申請:只需在需要使用的地方調(diào)用:readWritePermissionLauncher.launch() 即可觸發(fā)回調(diào) 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) { // 已全部授權(quán),則進(jìn)行選擇文件 documentLauncher.launch() } } // 拍照預(yù)覽 private val picturePreviewLauncher = takePicturePreviewLauncher{ binding.iv.setImageBitmap(it) } // 選擇文件 (類型:image/*) private val documentLauncher = openDocumentLauncher(arrayOf("image/*")){ binding.iv.setImageURI(it) } // startActivityForResult:只需在需要使用的地方調(diào)用:startActivityLauncher.launch(intent) 即可觸發(fā)回調(diào) private val startActivityLauncher = startActivityForResultLauncher{ log(msg = "resultCode = ${it.resultCode}") if(it.isResultOk()){ // 成功 showToast("Result Ok") }else{ showToast("Result Cancel") } }
然后通過申明的 XXXLauncher 調(diào)用函數(shù) launch 即可
// 如:cameraPermissionLauncher cameraPermissionLauncher.launch()
//如:startActivityLauncher startActivityLauncher.launch( intentOf( SampleActivity::class.java, "key1" to 2, "key2" to "Start Activity For Result" ) )
startActivity 使用示例(常在 Activity 或 Fragment 中使用)
// 相當(dāng)于 startActivity(Intent(this, MainActivity::class.java)) startActivity<MainActivity>()
或
// 相當(dāng)于 startActivity(Intent(this, MainActivity::class.java)) startActivity(MainActivity::class.java)
或(帶傳遞參數(shù))
// 相當(dāng)于 startActivity(Intent(this, MainActivity::class.java).putExtra("key1", 1).putExtra("key2", "Start Activity") startActivity(SampleActivity::class.java, "key1" to 1, "key2" to "Start Activity")
然后在跳轉(zhuǎn)后的界面接收數(shù)據(jù)
class SampleActivity : AppCompatActivity(R.layout.activity_sample) { // 懶加載:相當(dāng)于懶加載的方式獲取 getIntent().getExtras().get("key1"); 類型為:Int(有默認(rèn)值,可保證不為空,并通過默認(rèn)值的類型可自動推斷出變量的類型) private val extra1 by lazyIntentExtra("key1", 0) // 屬性委托:相當(dāng)于 getIntent().getExtras().get("key2"); 類型為:String(有默認(rèn)值,可保證不為空) private val extra2 by intentExtra("key2", "") }
Intent 的 intentExtra 使用示例(常在 Activity 中使用)
// 屬性委托:相當(dāng)于 getIntent().getExtras().get("extra1"); 類型為:Int? private val extra1: Int? by intentExtra<Int>("extra1") // 屬性委托:相當(dāng)于 getIntent().getExtras().get("extra2"); 類型為:Int?(有申明類型時,可以省略泛型) private val extra2: Int? by intentExtra("extra2") // 屬性委托:相當(dāng)于 getIntent().getExtras().get("extra3"); 類型為:Int?(有聲明泛型時,可以省略類型) private val extra3 by intentExtra<Int>("extra3") // 屬性委托:相當(dāng)于 getIntent().getExtras().get("extra4"); 類型為:Int(有默認(rèn)值,可保證不為空) private val extra4: Int by intentExtra("extra4", 1) // 屬性委托:相當(dāng)于 getIntent().getExtras().get("extra5"); 類型為:Int(有默認(rèn)值,通過默認(rèn)值的類型可自動推斷出變量的類型) private val extra5 by intentExtra("extra5", 1) // 屬性委托:相當(dāng)于 getIntent().getExtras().get("extra6"); 類型為:Int(key的默認(rèn)值如果忽略或為空時,則默認(rèn)值為變量的名稱) private val extra6 by intentExtra(defaultValue = 1) // 屬性委托:相當(dāng)于懶加載的方式獲取 getIntent().getExtras().get("extra7"); 類型為:Int? private val extra7: Int? by intentExtra() // 懶加載:相當(dāng)于懶加載的方式獲取 getIntent().getExtras().get("extra8"); 類型為:Int? private val extra8: Int? by lazyIntentExtra("extra8") // 懶加載:相當(dāng)于懶加載的方式獲取 getIntent().getExtras().get("extra9"); 類型為:Int(有默認(rèn)值,可保證不為空,并通過默認(rèn)值的類型可自動推斷出變量的類型) private val extra9 by lazyIntentExtra("extra9", 1)
Fragment 的 argument 使用示例(常在 Fragment 中使用)
// 屬性委托:相當(dāng)于 fragment.getArguments().get("arg1"); 類型為:Int? private val arg1: Int? by argument<Int>("arg1") // 屬性委托:相當(dāng)于 fragment.getArguments().get("arg2"); 類型為:Int?(有申明類型時,可以省略泛型) private val arg2: Int? by argument("arg2") // 屬性委托:相當(dāng)于 fragment.getArguments().get("arg3"); 類型為:Int?(有聲明泛型時,可以省略類型) private val arg3 by argument<Int>("arg3") // 屬性委托:相當(dāng)于 fragment.getArguments().get("arg4"); 類型為:Int(有默認(rèn)值,可保證不為空) private val arg4: Int by argument("arg4", 1) // 屬性委托:相當(dāng)于 fragment.getArguments().get("arg5"); 類型為:Int(有默認(rèn)值,通過默認(rèn)值的類型可自動推斷出變量的類型) private val arg5 by argument("arg5", 1) // 屬性委托:相當(dāng)于 fragment.getArguments().get("arg6"); 類型為:Int(key的默認(rèn)值如果忽略或為空時,則默認(rèn)值為變量的名稱) private val arg6 by argument(defaultValue = 1) // 屬性委托:相當(dāng)于懶加載的方式獲取 fragment.getArguments().get("arg7"); 類型為:Int? private val arg7: Int? by argument() // 懶加載:相當(dāng)于懶加載的方式獲取 fragment.getArguments().get("arg8"); 類型為:Int? private val arg8: Int? by lazyArgument("arg8") // 懶加載:相當(dāng)于懶加載的方式獲取 fragment.getArguments().get("arg9"); 類型為:Int(有默認(rèn)值,可保證不為空,并通過默認(rèn)值的類型可自動推斷出變量的類型) private val arg9 by lazyArgument("arg9", 1)
argument 主要使用場景示例
class SampleFragment : Fragment() { // 屬性委托的方式傳遞參數(shù) 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 { // 示例:屬性委托的方式傳遞參數(shù) this.argInt = argInt this.argString = argString this.argBool = isBool } } } //... }
評論
圖片
表情
