-
Notifications
You must be signed in to change notification settings - Fork 1
ActivityExtensions
燒餅 edited this page Jun 5, 2017
·
3 revisions
ActivityExtensions 为使用 Android Activity 组件时提供更多的便利。
有些 Android API 在不同系统版本的调用方法、传参会有所不同,通常我们需要检查 Build.VERSION.SDK_INT 是否达到要求。
本扩展提供一个简短的判断写法:
ifSupportSDK(Build.VERSION_CODES.LOLLIPOP) {
newMethod()
} ?: run { // 可选,当达不到要求时会执行 run 区块的代码
oldMethod()
}Android 6.0 开始引入了更完善的权限控制,可以由用户决定是否允许应用使用各项权限,一般情况下应用需要先获取许可之后才可以访问相关数据。
与其它第三方的权限处理 Library 相比较,Kotlinyan 提供了更简洁且完整的权限处理方式。
在这里举一个需要用到写入内部储存的权限的例子:
// 指定要获取的权限
runWithPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) {
// 应用已经拥有权限许可,可以执行相关代码
toast("Permission granted")
saveFile(context, file, data)
} ?: run {
// 应用获取权限时被拒绝,需要解释
toast("Permission should show rationale.")
AlertDialog.Builder(this)
.setTitle("Permission Denied")
.setMessage("Without storage permission, you cannot read or save files.")
// 用户理解并同意应用使用,调用 continueRunWithPermission 方法,如果成功后会执行上面的代码
.setPositiveButton("Request") { _, _ -> continueRunWithPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) }
.setNegativeButton(android.R.string.cancel, {_, _ -> })
.show()
}如果不复写 onRequestPermissionsResult 方法,Activity 不能正确收到授权对话框的结果,上面的执行的代码也不能在获得权限后即时生效,
这时候需要用到扩展提供的 handleOnRequestPermissionsResult 方法:
override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
handleOnRequestPermissionsResult(requestCode, permissions, grantResults) {
// 某个权限被拒绝了,需要做出相关响应
deniedPermission -> toast("onPermissionDenied: $deniedPermission")
}
}Toolbar 文本颜色会跟随主题设定生效,但 MenuItem 有时不会生效,而且 XML 中也没有提供 tint 属性。
则可以在菜单创建完毕后,调用 Menu.tintItemsColor(color : Int) 或者对某个 MenuItem 调用 tintColor(color : Int)。
在 onCreate 时调用 initTransparentStatusBar() 可启用透明状态栏,不提供布局调整,请自行学习。