更改系统后退按钮方向

时间:2016-03-07 10:19:56

标签: android android-softkeyboard

我目前正在开发我的活动,当你点击后退按钮而不是向下滑动键盘时,它将退出活动(正常的后退按钮行为)。这很好。

现在,我遇到的问题是,当显示键盘时,系统后退按钮(在Nexus设备上)指向下而不是向左指(返回活动)enter image description here

显示左侧键盘点的示例。

enter image description here

有没有办法以编程方式控制并确保键盘启动时不会指向它?

2 个答案:

答案 0 :(得分:1)

实际上并不好。键盘启动时Android上后退按钮的正常行为是隐藏键盘。如果我用键盘向上按下后退按钮以隐藏它并丢失我正在做的事情,我会非常生气并考虑你的应用程序错误。事实上,我的假设不是“他们覆盖后退按钮”,这将是“糟糕的应用程序崩溃”。

无法以编程方式更改该按钮的方向。向下箭头表示击中它将隐藏键盘。如果键盘没有被隐藏,因为你的应用程序违反了通常的规则,那么向下箭头是正确的 - 下一次按下后退按钮将关闭键盘。

答案 1 :(得分:0)

实际上,您可以覆盖Android中的后退按钮。这可以通过覆盖onKeyDown函数来实现,如下所示:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK) {
        // Hide keyboard and activate previous activity
        return false;
    }

    return super.onKeyDown(keyCode, event);
}

(虽然我承认,我从来没有测试过这个,看它是否会在键盘打开时起作用......)

天啊,如果这不起作用你甚至可以做一些略微“hacky”的事情,就像这样:

boolean opened = true;

public void setListenerToRootView(){
    final View activityRootView = getWindow().getDecorView().findViewById(android.R.id.content);
    activityRootView.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
        @Override
        public void onGlobalLayout() {
            int heightDiff = activityRootView.getRootView().getHeight() - activityRootView.getHeight();
            if (heightDiff > 100 )
                opened = true;
            else if(opened == true)
                opened = false;
        }
    });
}

这种方法显然可能会导致错误,如果他们有浮动键盘或特定的东西,但你可以根据需要处理它。

注意:这些都没有解决箭头指向下方的事实。我不认为你可以真正修改它,虽然你可以至少修改它的行为,只要键盘被移除就导航到上一个活动。