Entry 获得焦点时隐藏键盘
Hide keyboard when Entry gets focus
情况
我有一个使用外部键盘的 Android 应用程序,并且想在 Entry
控件获得焦点时隐藏软键盘。
参考
在 this android documentation 之后声明如下:
Note: If the user's device has an attached hardware keyboard, the soft input method does not appear.
但是,在某些 Android 设备中,当 Entry
获得焦点时,软输入 会出现 。
在这些情况下如何隐藏软输入?
提前致谢!
您可以使用此代码隐藏软键盘
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
获取 EditText 的一个实例
EditText editText = (EditText) findViewById(R.id.edittext);
要防止默认软键盘出现在 EditText 中,请覆盖以下事件
// 显示自定义键盘
edittext.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (hasFocus) showCustomKeyboard(v);
else hideCustomKeyboard();
}
});
edittext.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
showCustomKeyboard(v);
}
});
edittext.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
EditText edittext = (EditText) v;
int inType = edittext.getInputType(); // Backup the input type
edittext.setInputType(InputType.TYPE_NULL); // Disable standard keyboard
edittext.onTouchEvent(event); // Call native handler
edittext.setInputType(inType); // Restore input type
return true; // Consume touch event
}
});
}
public void hideCustomKeyboard() {
keyboardView.setVisibility(View.GONE);
keyboardView.setEnabled(false);
}
public void showCustomKeyboard( View v) {
keyboardView.setVisibility(View.VISIBLE);
keyboardView.setEnabled(true);
if( v!=null ){
((InputMethodManager)getSystemService(Activity.INPUT_METHOD_SERVICE)).hideSoftInputFromWindow(v.getWindowToken(), 0);
}
}
public boolean isCustomKeyboardVisible() {
return keyboardView.getVisibility() == View.VISIBLE;
}
@Override public void onBackPressed() {
if( isCustomKeyboardVisible() ) hideCustomKeyboard(); else this.finish();
}
免责声明:- 我在我的应用程序中实现了自定义键盘并编写了本教程 - http://inducesmile.com/android/how-to-create-an-android-custom-keyboard-application/
这对我有用:
public static void DisableSoftKeyboard (EditText editText)
{
((InputMethodManager)GetSystemService(Context.InputMethodService)).HideSoftInputFromWindow(editText.WindowToken, 0);
if (Build.VERSION.SdkInt >= BuildVersionCodes.Honeycomb) {
editText.SetRawInputType (InputTypes.ClassText);
editText.SetTextIsSelectable (true);
} else {
editText.SetRawInputType (InputTypes.Null);
editText.Focusable = true;
}
}
实施:
editText.FocusChange+= (sender, e) => {
DisableSoftKeyboard(editText);
};
情况
我有一个使用外部键盘的 Android 应用程序,并且想在 Entry
控件获得焦点时隐藏软键盘。
参考
在 this android documentation 之后声明如下:
Note: If the user's device has an attached hardware keyboard, the soft input method does not appear.
但是,在某些 Android 设备中,当 Entry
获得焦点时,软输入 会出现 。
在这些情况下如何隐藏软输入?
提前致谢!
您可以使用此代码隐藏软键盘
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
获取 EditText 的一个实例
EditText editText = (EditText) findViewById(R.id.edittext);
要防止默认软键盘出现在 EditText 中,请覆盖以下事件
// 显示自定义键盘
edittext.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (hasFocus) showCustomKeyboard(v);
else hideCustomKeyboard();
}
});
edittext.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
showCustomKeyboard(v);
}
});
edittext.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
EditText edittext = (EditText) v;
int inType = edittext.getInputType(); // Backup the input type
edittext.setInputType(InputType.TYPE_NULL); // Disable standard keyboard
edittext.onTouchEvent(event); // Call native handler
edittext.setInputType(inType); // Restore input type
return true; // Consume touch event
}
});
}
public void hideCustomKeyboard() {
keyboardView.setVisibility(View.GONE);
keyboardView.setEnabled(false);
}
public void showCustomKeyboard( View v) {
keyboardView.setVisibility(View.VISIBLE);
keyboardView.setEnabled(true);
if( v!=null ){
((InputMethodManager)getSystemService(Activity.INPUT_METHOD_SERVICE)).hideSoftInputFromWindow(v.getWindowToken(), 0);
}
}
public boolean isCustomKeyboardVisible() {
return keyboardView.getVisibility() == View.VISIBLE;
}
@Override public void onBackPressed() {
if( isCustomKeyboardVisible() ) hideCustomKeyboard(); else this.finish();
}
免责声明:- 我在我的应用程序中实现了自定义键盘并编写了本教程 - http://inducesmile.com/android/how-to-create-an-android-custom-keyboard-application/
这对我有用:
public static void DisableSoftKeyboard (EditText editText)
{
((InputMethodManager)GetSystemService(Context.InputMethodService)).HideSoftInputFromWindow(editText.WindowToken, 0);
if (Build.VERSION.SdkInt >= BuildVersionCodes.Honeycomb) {
editText.SetRawInputType (InputTypes.ClassText);
editText.SetTextIsSelectable (true);
} else {
editText.SetRawInputType (InputTypes.Null);
editText.Focusable = true;
}
}
实施:
editText.FocusChange+= (sender, e) => {
DisableSoftKeyboard(editText);
};