我的应用程序的 UI 完全是用代码构建的。这是一个删除了activity_main.xml的EMPTY ACTIVITY,并使用以下样式:
<style name="myTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="windowNoTitle">true</item>
<item name="windowActionBar">false</item>
<item name="android:windowBackground">@drawable/splashbg</item>
</style>
基本活动如下所示,以mainView (全局变量)作为根视图:
class MyApp: AppCompatActivity(), View.OnTouchListener, OnMapReadyCallback {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
mainView = FrameLayout(this).apply {
layoutParams = FrameLayout.LayoutParams(
FrameLayout.LayoutParams.MATCH_PARENT,
FrameLayout.LayoutParams.MATCH_PARENT
)
setBackgroundColor(Color.WHITE)
}
setContentView(mainView)
supportActionBar?.hide()
}
override fun onBackPressed() {
println("onBackPressed")
super.onBackPressed()
}
override fun dispatchKeyEvent(event: KeyEvent?): Boolean {
println("dispatchKeyEvent")
return super.dispatchKeyEvent(event)
}
override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean {
println("onKeyDown")
return super.onKeyDown(keyCode, event)
}
override fun onKeyUp(keyCode: Int, event: KeyEvent?): Boolean {
println("onKeyUp")
return super.onKeyUp(keyCode, event)
}
}
还应该注意的是,该应用程序已迁移到AndroidX,因此正在使用以下库:
import androidx.appcompat.app.AppCompatActivity
import androidx.core.app.ActivityCompat
除了键事件方法外,该应用程序按预期工作。我正在尝试拦截onBackPressed事件,但似乎没有任何效果。没有事件响应,不是onKeyDown、onKeyUp、onBackPressed或dispatchKeyEvent。控制台不会打印任何println输出,而是每当我按下手机的物理BACK键时都会得到这些输出:
2019-11-14 03:57:44.541 16056-16056/? I/GoogleInputMethod: onKeyDown() : keyCode = 4, event = KeyEvent { action=ACTION_DOWN, keyCode=KEYCODE_BACK, scanCode=158, metaState=0, flags=0x48, repeatCount=0, eventTime=280842030, downTime=280842030, deviceId=5, source=0x101 }
2019-11-14 03:57:44.590 1434-1540/? D/BaseMiuiPhoneWindowManager: keyCode:4 down:false eventTime:280842082 downTime:280842030 policyFlags:22000002 deviceId:5 isScreenOn:true keyguardActive:false repeatCount:0
是否有一些我可能错过的配置或设置?
TIA。
编辑: 我还应该补充一点,当键盘可见时会发生此问题。按下BACK键会关闭键盘,但不会触发按键事件。