我有一个自定义视图,可以在同一个空间中显示应该是android的软键盘原生视图。
我需要打开键盘,单击按钮,隐藏键盘并在键盘所在的同一位置显示其他视图。
我现在只使用隐藏键盘并显示自定义视图,但有一个奇怪的行为和最小滞后和重叠。
有人实施了类似的东西吗?
答案 0 :(得分:3)
我已经检查了Github项目并发现了错误,我已使用以下代码修复了该错误:
if (isRedPanelVisible()) {
showRedPanel(false);
showKeyboard(true, new KeyboardCallback() {
@Override
public void onKeyboardDone(boolean isVisible) {
}
});
}
if (KeyboardVisibilityEvent.isKeyboardVisible(TestActivity.this)) {
hideKeyboard(TestActivity.this);
new android.os.Handler().postDelayed(new Runnable() {
@Override
public void run() {
showRedPanel(true);
}
}, 100);
注意:您只需将其放在按钮的单击事件下的TestActivity.java中,然后删除以前的代码。
我做了什么
如果 readPanel可见,则我将showRedPanel
调到false
并尝试打开键盘。
之后我添加了对键盘可见性事件的检查,如果键盘可见,我调用了hideKeyboard
以使键盘消失,并在showReadPanel
后调用true
延迟 100 ms
代码:hideKeyboard
public void hideKeyboard(Activity activity) {
// Check if no view has focus:
try {
View view = activity.getCurrentFocus();
if (view != null) {
InputMethodManager inputManager = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);
inputManager.hideSoftInputFromWindow(view.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
}
} catch (Exception e) {
}
}
答案 1 :(得分:3)
所以代码中发生的是:
告诉系统关闭键盘 - > 显示红色面板,延迟时间 - > 键盘关闭前显示红色面板 - > 由于键盘模式位于adjustResize
键盘上方显示的红色面板 - > 键盘已关闭 - > 一切就绪
尝试将清单中的windowSoftInputMode
从adjustResize
更改为adjustNothing
。
可悲的是,android中的键盘并不像IOS那样顺畅,键盘由OS处理意味着你无法控制它的大小,打开/关闭动画而没有回调!因此,最好的方法是始终显示红色面板,并在需要时在顶部上打开键盘。
答案 2 :(得分:-2)
使用以下功能显示/隐藏键盘:
/**
* Hides the soft keyboard
*/
public void hideSoftKeyboard() {
if(getCurrentFocus()!=null) {
InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
inputMethodManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
}
}
/**
* Shows the soft keyboard
*/
public void showSoftKeyboard(View view) {
InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
view.requestFocus();
inputMethodManager.showSoftInput(view, 0);
}