gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-11-01 09:47:26 25 4
gpt4 key购买 nike

有什么方法可以强制在 NumberPassword 模式下显示 Android 的 SoftKeyboard 而无需在我的 Activity 中使用实际的 EditText?

我通过在我的 AndroidManifest.xml 上添加 android:windowSoftInputMode="stateAlwaysVisible" 设法在 Activity 开始时显示键盘,通过覆盖 onKeyPreIme 使其无法关闭在扩展 TextViewCustomView 类中,并通过覆盖 Activity 中的 onKeyUp 自行处理触摸事件。

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

我想实现的是:

  • SoftKeyboard 在 Activity Start 和 Resume from the background 上始终不可用
  • 不能用 KEYCODE_ENTER 或 KEYCODE_BACK 关闭
  • 9 位布局 + 退格键
  • 自己处理按键压力,让它做其他事情而不是写字符

最佳答案

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

Both the Activity and View class implement the KeyEvent.Callback interface, so you should generally override the callback methods in your extension of these classes as appropriate.

我建议您在 CustomView 类中覆盖 onKeyUp 的默认实现,并使 CustomView.onKeyUp 方法将事件重定向到您的 ActivityonKeyUp 方法。

举个例子:

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 中执行此操作:

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
}
});

这将帮助您将 onKeyUp 方法调用从您的 CustomView 重定向到您的 Activity 的 onKeyUp 实现。

关于android - 在没有 EditText 的 NumberPassword 模式下强制 Android 软键盘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37341930/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com