android - 防止按下 android 后退按钮时软键盘关闭

标签 android

我有一个带有编辑文本的 Activity 。当 Activity 来临时,我总是专注于那个 Edittext。 我通过提供

使软键盘始终可见
android:windowSoftInputMode="stateAlwaysVisible" 

在 list 中。我正在按软键盘的完成按钮执行功能。实际上,我的需要是当用户进行此 Activity 时,软键盘应该始终存在。 现在我禁用了后退按钮按下,通过覆盖并且什么都不做。

@Override
public void onBackPressed() {
    // Do nothing
}

但软键盘在后按时会消失。如何摆脱这个。我试过这个Prevent soft keyboard from being dismissed但仍然在后按键盘上被解雇。但它会通过再次按下后退按钮回来,我需要的是 backpress 不应该关闭软键盘。任何帮助将不胜感激。

最佳答案

使用一个界面创建一个自定义 EditText,例如跟随:

public class CustomEditText extends EditText {


    public void setHandleDismissingKeyboard(
        handleDismissingKeyboard handleDismissingKeyboard) {
           this.handleDismissingKeyboard = handleDismissingKeyboard;
    }

    private handleDismissingKeyboard handleDismissingKeyboard;

    public interface handleDismissingKeyboard {
        public void dismissKeyboard();
    }

    @SuppressLint("NewApi")
    public CustomEditText(Context context, AttributeSet attrs,
                             int defStyleAttr, int defStyleRes) {
        super(context, attrs, defStyleAttr, defStyleRes);
        // TODO Auto-generated constructor stub
    }

    public CustomEditText(Context context) {
        super(context);
        // TODO Auto-generated constructor stub
    }

    public CustomEditText(Context context, AttributeSet attrs) {
        super(context, attrs);
        // TODO Auto-generated constructor stub
    }

    public CustomEditText(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        // TODO Auto-generated constructor stub
    }


    @Override
    public boolean onKeyPreIme(int keyCode, KeyEvent event) {
        if (event.getKeyCode() == KeyEvent.KEYCODE_BACK
                && event.getAction() == KeyEvent.ACTION_UP) {
            handleDismissingKeyboard.dismissKeyboard();
            return true;
        }
        return super.dispatchKeyEvent(event);
    }

然后在您的 Activity 中创建初始化您的 CustomEditText 并使用:

customEditText.setHandleDismissingKeyboard(this);

然后实现类和覆盖方法并将您的代码放入其中

有关我的答案的更多信息,您需要的只是 onKeyPreIme,您可以在 EditText 类中覆盖它(正如我为您发布的那样)以处理其上的所有键,例如返回键或任何其他键盘键, 我在自定义类中放置了一个内部接口(interface),以便从此类回调到您想要的每个 Activity 或类,您也可以使用静态方法来做到这一点,并且如果您想防止关闭键盘,您可以返回 true 在那。

对于使用 CustomEditText,您可以使用 xml 或在 java 中,定义它并像其他小部件( Button , TextView ,... )一样初始化它,唯一不同的是您需要在您的 xml 中定义它喜欢:

 <yourPackage.CustomEditText ..... />

关于android - 防止按下 android 后退按钮时软键盘关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27721709/

相关文章:

android - 如何为 iOS 和 Android 创建多轨播放器(如 DJ 混音器)?

android - RecyclerView 中的 CardView 没有间隙和 textview 超出布局

android - 如何从 Android 应用程序打开 Gmail 收件箱?

android - 如何从 android studio 的 sdk 管理器中重新安装已删除的包?

java - 仅发布适用于 3.2+ 平板电脑和 2.2+ 手机的应用程序?

android - Unity 3d - 参加体育课

java - Android API 中存在多少核心 Java API

java - Gradle 构建无法解析 aar 库依赖项 (trnql sdk)

android - 我如何将域放在 AWS ESB 前面

java - 定位器不起作用,除了 WebView 中 Appium for Android 上的 id