我在清单中有一个带有 android:windowSoftInputMode="stateVisible"
的 Edittext。现在,当我开始活动时,将显示键盘。如何隐藏它?我不能使用 android:windowSoftInputMode="stateHidden
,因为当键盘可见时,最小化应用程序并恢复它,键盘应该可见。我试过了
InputMethodManager imm = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
但它没有用。
在 AndroidManifest.xml
中:
<activity android:name="com.your.package.ActivityName"
android:windowSoftInputMode="stateHidden" />
或尝试
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
另请检查 this
使用以下功能显示/隐藏键盘:
/**
* 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);
}
onFocusChange()
只需在editText的父视图中添加两个属性即可。
android:focusable="true"
android:focusableInTouchMode="true"
将其放在 Activity 标记内的清单中
android:windowSoftInputMode="stateHidden"
要在新活动启动或 onCreate()
、onStart()
等时隐藏软键盘,您可以使用以下代码:
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
使用 AndroidManifest.xml
<activity android:name=".YourActivityName"
android:windowSoftInputMode="stateHidden"
/>
使用 Java
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
使用上述解决方案键盘隐藏但edittext在创建活动时获取焦点,但在您触摸它们时使用:
添加你的 EditText
<EditText
android:focusable="false" />
还添加您的 EditText 的侦听器
youredittext.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
v.setFocusable(true);
v.setFocusableInTouchMode(true);
return false;
}});
将以下文本添加到您的 xml 文件中。
<!--Dummy layout that gain focus -->
<LinearLayout
android:layout_width="0dp"
android:layout_height="0dp"
android:focusable="true"
android:focusableInTouchMode="true"
android:orientation="vertical" >
</LinearLayout>
如果您不想使用 xml,请制作 Kotlin Extension 以隐藏键盘
// In onResume, call this
myView.hideKeyboard()
fun View.hideKeyboard() {
val inputMethodManager = context.getSystemService(INPUT_METHOD_SERVICE) as InputMethodManager
inputMethodManager.hideSoftInputFromWindow(windowToken, 0)
}
基于用例的替代方案:
fun Fragment.hideKeyboard() {
view?.let { activity?.hideKeyboard(it) }
}
fun Activity.hideKeyboard() {
// Calls Context.hideKeyboard
hideKeyboard(currentFocus ?: View(this))
}
fun Context.hideKeyboard(view: View) {
view.hideKeyboard()
}
如何显示软键盘
fun Context.showKeyboard() { // Or View.showKeyboard()
val inputMethodManager = context.getSystemService(INPUT_METHOD_SERVICE) as InputMethodManager
inputMethodManager.toggleSoftInput(SHOW_FORCED, HIDE_IMPLICIT_ONLY)
}
同时请求对编辑文本的关注时更简单的方法
myEdittext.focus()
fun View.focus() {
requestFocus()
showKeyboard()
}
奖金简化:
删除永远使用 getSystemService
的要求:Splitties Library
// Simplifies above solution to just
inputMethodManager.hideSoftInputFromWindow(windowToken, 0)
我希望这会奏效,我尝试了很多方法,但这个方法在 fragments
中对我有用。只需将这一行放在 onCreateview/init 中。
getActivity().getWindow().setSoftInputMode(
WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
在 manifasts 这个属性中添加你的活动
android:windowSoftInputMode="stateHidden"
将此代码放入您的java文件并在edittext上传递对象的参数,
private void setHideSoftKeyboard(EditText editText){
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(editText.getWindowToken(), 0);
}
要在 New Activity 启动或 onCreate()、onStart() 方法等时隐藏软键盘,请使用以下代码:
getActivity().getWindow().setSoftInputMode(WindowManager.
LayoutParams.SOFT_INPUT_STATE_HIDDEN);
要在 Button 时隐藏软键盘,请单击活动:
View view = this.getCurrentFocus();
if (view != null) {
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
assert imm != null;
imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
}
使用 SOFT_INPUT_STATE_ALWAYS_HIDDEN 而不是 SOFT_INPUT_STATE_HIDDEN
this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
上面的答案也是正确的。我只是想简要说明一下,在 manifest.xml 中启动 Activity 时有两种方法可以隐藏键盘。例如:
<activity
..........
android:windowSoftInputMode="stateHidden"
..........
/>
上述方式在进入活动时总是隐藏它。
或者
<activity
..........
android:windowSoftInputMode="stateUnchanged"
..........
/>
这个说不要改变它(例如,如果它尚未显示,则不要显示它,但如果在进入活动时它是打开的,则让它保持打开状态)。
您可以在 AndroidManifest.xml 上设置配置
例子:
<activity
android:name="Activity"
android:configChanges="orientation|keyboardHidden"
android:theme="@*android:style/Theme.NoTitleBar"
android:launchMode="singleTop"
android:windowSoftInputMode="stateHidden"/>
首次启动 Activity 时使用以下代码隐藏软键盘
getActivity().getWindow().setSoftInputMode(WindowManager.
LayoutParams.SOFT_INPUT_STATE_HIDDEN);
这就是我所做的:
yourEditText.setCursorVisible(false); //This code is used when you do not want the cursor to be visible at startup
yourEditText.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
v.onTouchEvent(event); // handle the event first
InputMethodManager imm = (InputMethodManager)v.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
if (imm != null) {
imm.hideSoftInputFromWindow(v.getWindowToken(), 0); // hide the soft keyboard
yourEditText.setCursorVisible(true); //This is to display cursor when upon onTouch of Edittext
}
return true;
}
});
也试试这个
Ed_Cat_Search = (EditText) findViewById(R.id.editText_Searc_Categories);
Ed_Cat_Search.setInputType(InputType.TYPE_NULL);
Ed_Cat_Search.setOnTouchListener(new View.OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
Ed_Cat_Search.setInputType(InputType.TYPE_CLASS_TEXT);
Ed_Cat_Search.onTouchEvent(event); // call native handler
return true; // consume touch even
}
});
如果您的应用程序面向 Android API 级别 21 或更高级别,则有可用的默认方法。
editTextObj.setShowSoftInputOnFocus(false);
确保您在 EditText
XML 标记中设置了以下代码。
<EditText
....
android:enabled="true"
android:focusable="true" />
尝试这个。
首先在可搜索的 xml 中,字段(名称和提示等)放置 @string
而不是文字字符串。
然后方法 onCreateOptionsMenu
,它必须有一个 ComponentName
对象,其中包含您的包名称和完整的类名称(带有包名称) - 如果具有 SearchView
组件的活动与显示搜索结果相同,请使用 {4 },正如谷歌安卓开发者所说。
我尝试了很多解决方案,经过很多工作,这个解决方案对我有用。
Ed_Cat_Search = (EditText) findViewById(R.id.editText_Searc_Categories);
Ed_Cat_Search.setInputType(InputType.TYPE_NULL);
Ed_Cat_Search.setOnTouchListener(new View.OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
Ed_Cat_Search.setInputType(InputType.TYPE_CLASS_TEXT);
Ed_Cat_Search.onTouchEvent(event); // call native handler
return true; // consume touch even
}
});
this one worked for me
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
它会起作用
android:windowSoftInputMode="stateHidden"