创建自定义弹框
val view = LayoutInflater.from(context).inflate(R.layout.dialog_no_net, null, false)
val builder = AlertDialog.Builder(context)
builder.setView(view)
val mDialog= builder.create().also { noNetDialog=it }
mDialog.window!!.setBackgroundDrawable(ColorDrawable(0))
val vCancel = view.findViewById<TextView>(R.id.tvCancel)
val tvConnect = view.findViewById<TextView>(R.id.tvConnect)
vCancel.setOnClickListener { mDialog.dismiss() }
tvConnect.setOnClickListener {context.startActivity(Intent(Settings.ACTION_WIFI_SETTINGS))}
mDialog.show()
其中:dialog_no_net是你的自定义dialog布局,setBackgroundDrawable(ColorDrawable(0))是设置背景为透明。vCancel 、tvConnect 是两个控件。vCancel点击dialog消失,tvConnect是跳转到WIFI连接界面。
屏蔽返回键和Home键
MainActivity.kt
val FLAG_HOMEKEY_DISPATCHED = -0x80000000//定义屏蔽参数
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
this.getWindow().setFlags(FLAG_HOMEKEY_DISPATCHED, FLAG_HOMEKEY_DISPATCHED)
}
override fun onKeyDown(keyCode :Int, event:KeyEvent):Boolean{
return when(keyCode){
KeyEvent.KEYCODE_BACK,KeyEvent.KEYCODE_MANNER_MODE,KeyEvent.KEYCODE_HOME -> true
else -> false
}
}
这样做返回键屏蔽更安全。使用了屏蔽参数KeyEvent.KEYCODE_BACK,KeyEvent.KEYCODE_MANNER_MODE,KeyEvent.KEYCODE_HOME分别为返回键,方式模式键,Home键
Activity之间的安全跳转
从aActivity跳转bActivity
在aActivity中
bActivity.open(
this,
SPHelper.getSysGrade()//传入的参数
)
在bActivity中
class MainActivity:Activity{
companion object {
fun open(context: Context, @GradeTag grade: Int) {
val intent = Intent(context, MainActivity::class.java)
.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
.putExtra(KEY_MAIN_GRADE, grade)//获取aActivity中传入的参数
context.startActivity(intent)
}
}
......
}
这样的跳转经常在协同开发同一个应用的时候经常用到。双发各自编写自己的Activity,跳转不受传入参数的影响。
获取程序正在运行的Activity(即TopActivity)
private fun getRunningActivityName(): String {
val activityManager: ActivityManager =
getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager
return activityManager.getRunningTasks(1).get(0).topActivity?.getClassName().toString()
}
这里最终获取到了Activity.class的名字String。