在没有EditText的NumberPassword模式下强制Android的软键盘

时间:2016-05-20 08:38:32

标签: android android-softkeyboard

有没有办法在NumberPassword模式下强制显示Android的SoftKeyboard而我的活动中没有实际的EditText?

我设法在活动开始时通过在我的AndroidManifest.xml上添加android:windowSoftInputMode="stateAlwaysVisible"来显示键盘,因此无法通过覆盖扩展onKeyPreIme类的CustomView来关闭TextView 1}},并通过在我的活动中覆盖onKeyUp来自行处理触摸事件。

如果我直接在CustomView的XML布局中添加android:inputType="numberPassword",则会绕过Activity的onKeyUp,并且我的CustomView和KEYCODE_ENTER中的键盘写字符会关闭我的键盘。

我想要实现的目标是:

  • SoftKeyboard总是在活动开始时和从后台恢复
  • 无法使用KEYCODE_ENTER或KEYCODE_BACK
  • 关闭
  • 9位布局+退格
  • 自己处理关键压力,让它做其他事情,而不是写字符

1 个答案:

答案 0 :(得分:2)

为了方便起见https://developer.android.com/training/keyboard-input/commands.html

  

ActivityView类都实现了KeyEvent.Callback   接口,所以你通常应该覆盖回调方法   适当时扩展这些类。

我建议您覆盖onKeyUp课程中CustomView的默认实施,并将CustomView.onKeyUp方法重定向到您的Activity {{1}方法。

举个例子:

onKeyUp

public class CustomView extends TextView { private KeyEvent.Callback myKeyEventCallback; public void setCustomKeyEventCallback(KeyEvent.Callback callback) { myKeyEventCallback = callback; } ... @Override public boolean onKeyUp(int keyCode, KeyEvent event) { return myKeyEventCallback.onKeyUp(keyCode, event); } } 执行此操作:

Activity

这有助于您将onKeyUp方法调用从CustomView view = ...; // here you take the reference to your custom view view.setCustomKeyEventCallback(new KeyEvent.Callback() { // ... other methods @Override public boolean onKeyUp(int keyCode, KeyEvent event) { // this calls your activity's implementation of onKeyUp MyActivity.this.onKeyUp(keyCode, event); return false; // prevent event from firing twice } }); 重定向到CustomView的onKeyUp实现。