【问题标题】:The device BACK key not working and all other key events not responding either设备 BACK 键不起作用,所有其他键事件也没有响应
【发布时间】:2020-03-10 03:33:50
【问题描述】:

我的应用程序的 UI 完全是用代码构建的。这是一个 EMPTY ACTIVITY,删除了 activity_main.xml,并采用以下样式:

<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>

基本活动如下所示,ma​​inView (全局变量) 充当根视图:

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 键会关闭键盘,但不会触发按键事件。

【问题讨论】:

  • 用xml替换mainView再试一次
  • 我已经在一个新项目中尝试过。我开始了另一个 Android Studio 模板项目,添加了一堆 EditText 控件,并添加了所有的键事件覆盖。依然没有。我还在运行 Android 5.0 的三星 Galaxy 手机和运行 Android 7.1 的小米 Redmi 手机上进行了测试。这两款设备都使用了谷歌键盘,所以我什至用三星 Galaxy 上的 OEM 键盘进行了测试。但还是一无所获。我一定做错了什么。你能让它工作吗?

标签: android kotlin onbackpressed programmatically-created google-input-tools


【解决方案1】:

用这个作为返回键

public boolean onSupportNavigateUp() {
    onBackPressed();
    return true;
}

对于设备返回按钮尝试使用

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
    // your code
    return true;
}

return super.onKeyDown(keyCode, event);

}

【讨论】:

  • 这是物理后退按钮。
猜你喜欢
  • 1970-01-01
  • 2016-11-29
  • 2017-01-16
  • 2023-01-16
  • 2020-09-16
  • 2021-07-08
  • 1970-01-01
  • 1970-01-01
  • 2018-04-09
相关资源
最近更新 更多