【问题标题】:Prevent softkeyboard dismiss on the android back button press防止按下 android 后退按钮时软键盘关闭
【发布时间】:2015-02-27 13:52:04
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • @HareshChhelana 完整阅读了这个问题
  • 我的意图不是关闭/隐藏软键盘。它是为了防止在按下后退按钮时关闭键盘
  • 这不是一个重复的问题。为什么你们不仔细阅读问题而只是将其标记为重复?
  • 显然不是重复的问题!
  • 这个副本没有意义。防止解雇与以编程方式显示/隐藏完全不同。投票重新开放。

标签: android


【解决方案1】:

使用一个界面创建一个自定义 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);
    }

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

customEditText.setHandleDismissingKeyboard(this);

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

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

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

 <yourPackage.CustomEditText ..... />

【讨论】:

  • 这个答案似乎很臃肿——onKeyPreIme() 上的主要答案可以更好地解释,而额外的类作为如何使用它的示例。
  • @ataulm 我解释得更多,但我认为不需要更多解释,无论如何感谢您通知我和您的建议。我希望这已经足够了,因为我的英语不好,我无法解释更多:)
  • @JesbinMJ 很高兴为您提供帮助。
猜你喜欢
  • 2019-10-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-22
  • 2012-05-10
  • 1970-01-01
  • 1970-01-01
  • 2011-04-25
相关资源
最近更新 更多