- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
对于某些 EditText
View ,我想使用自定义键盘而不是软键盘。
问题是当我第一次点击 EditText
时,两个键盘都会显示。当我第二次点击时 - 软键盘终于消失了。
这种行为的原因可能是什么?
这是我使用的代码:
package pkleczek.profiwan.keyboards;
import android.app.Activity;
import android.inputmethodservice.KeyboardView;
import android.text.InputType;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnFocusChangeListener;
import android.view.inputmethod.InputMethodManager;
import android.widget.EditText;
public abstract class CustomKeyboard {
/** A link to the KeyboardView that is used to render this CustomKeyboard. */
protected KeyboardView mKeyboardView;
/** A link to the activity that hosts the {@link #mKeyboardView}. */
protected Activity mHostActivity;
/** Returns whether the CustomKeyboard is visible. */
public boolean isCustomKeyboardVisible() {
return mKeyboardView.getVisibility() == View.VISIBLE;
}
/**
* Make the CustomKeyboard visible, and hide the system keyboard for view v.
*/
public void showCustomKeyboard(View v) {
mKeyboardView.setVisibility(View.VISIBLE);
mKeyboardView.setEnabled(true);
if (v != null) {
InputMethodManager inputManager = (InputMethodManager) mHostActivity
.getSystemService(Activity.INPUT_METHOD_SERVICE);
inputManager.hideSoftInputFromWindow(v.getWindowToken(), 0);
}
}
/** Make the CustomKeyboard invisible. */
public void hideCustomKeyboard() {
mKeyboardView.setVisibility(View.GONE);
mKeyboardView.setEnabled(false);
}
/**
* Register <var>EditText<var> with resource id <var>resid</var> (on the
* hosting activity) for using this custom keyboard.
*
* @param resid
* The resource id of the EditText that registers to the custom
* keyboard.
*/
public void registerEditText(int resid) {
EditText edittext = (EditText) mHostActivity.findViewById(resid);
edittext.setOnFocusChangeListener(new OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (hasFocus) {
showCustomKeyboard(v);
} else {
hideCustomKeyboard();
}
}
});
edittext.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
showCustomKeyboard(v);
}
});
edittext.setInputType(edittext.getInputType()
| InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS);
}
}
最佳答案
尝试在 inputManager.hideSoftInputFromWindow(v.getWindowToken(), 0);
行之前将以下条件放入 InputMethodManager 代码中:
if (inputManager!=null) {
Activity activity = getActivity();
if (acvivity == null)
return;
if (activity.getCurrentFocus() == null)
return;
if (activity.getCurrentFocus().getWindowToken() == null)
return;
inputManager.hideSoftInputFromWindow(activity.getCurrentFocus().getWindowToken(), 0);
}
我在 ListFragment 中使用它来隐藏默认键盘。首先,当我按下 EditText 并显示键盘时,当打开 onScrollStateChanged 时,我将其隐藏。
您也可以尝试将 InputMethodManager 代码放在 EditText 的 onClickListener 中,然后调用您的 showCustomKeyboard() 方法。
在if (v != null)
后面放一个Else语句和Log,也许你的View v
为 null。
关于android - hideSoftInputFromWindow 不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21573586/
对于某些 EditText View ,我想使用自定义键盘而不是软键盘。 问题是当我第一次点击 EditText 时,两个键盘都会显示。当我第二次点击时 - 软键盘终于消失了。 这种行为的原因可能是什
我在这一行得到一个空指针异常: public void hideKeyboard(){ InputMethodManager inputManager = (InputMethodManager)
我有 Java 代码,可以使用 InputMethodManager 隐藏软键盘。当我将代码转换为 Kotlin 时,相同的代码会引发 NoMethodFound 异常。 我可以轻松地在 Java 和
搜索完成后,我尝试隐藏软键盘,但我找不到失败的原因。 我创建如下搜索菜单: @Override public void onCreateOptionsMenu(Menu menu, MenuInfla
我有一些代码: inputMethodManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0, new Result
我是一名优秀的程序员,十分优秀!