我在Manifest中有一个带有android:windowSoftInputMode="stateVisible"
的Edittext。现在,当我开始活动时,将显示键盘。如何隐藏它?我无法使用android:windowSoftInputMode="stateHidden
,因为当键盘可见时,请最小化应用并恢复键盘应该可见。
我试过
InputMethodManager imm = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
但它不起作用。
答案 0 :(得分:337)
在AndroidManifest.xml
:
<activity android:name="com.your.package.ActivityName"
android:windowSoftInputMode="stateHidden" />
或尝试
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
请同时查看this
答案 1 :(得分:197)
使用以下功能显示/隐藏键盘:
/**
* 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);
}
答案 2 :(得分:34)
只需将两个属性添加到editText的父视图中即可。
android:focusable="true"
android:focusableInTouchMode="true"
答案 3 :(得分:34)
将它放在Activity标记
中的清单中 android:windowSoftInputMode="stateHidden"
答案 4 :(得分:25)
答案 5 :(得分:14)
要在新活动开始时隐藏软键盘或onCreate()
,onStart()
等,您可以使用以下代码:
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
答案 6 :(得分:7)
将以下文本添加到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>
答案 7 :(得分:7)
使用 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;
}});
答案 8 :(得分:5)
// 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)
答案 9 :(得分:5)
我希望这会有效,我尝试了很多方法,但这个方法在fragments
中适合我。只需将此行放入onCreateview / init。
getActivity().getWindow().setSoftInputMode(
WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
答案 10 :(得分:4)
要在New Activity start或onCreate(),onStart()方法等时隐藏软键盘,请使用以下代码:
getActivity().getWindow().setSoftInputMode(WindowManager.
LayoutParams.SOFT_INPUT_STATE_HIDDEN);
要在按钮单击活动时隐藏软键盘:
View view = this.getCurrentFocus();
if (view != null) {
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
assert imm != null;
imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
}
答案 11 :(得分:3)
以上答案也是正确的。我只想简单说明一下,在开始活动时有两种方法可以从manifest.xml隐藏键盘。 例如:
<activity
..........
android:windowSoftInputMode="stateHidden"
..........
/>
或
<activity
..........
android:windowSoftInputMode="stateUnchanged"
..........
/>
答案 12 :(得分:3)
使用以下代码在您启动活动时第一次隐藏软键盘
getActivity().getWindow().setSoftInputMode(WindowManager.
LayoutParams.SOFT_INPUT_STATE_HIDDEN);
答案 13 :(得分:3)
您可以在AndroidManifest.xml上设置配置
示例:
<activity
android:name="Activity"
android:configChanges="orientation|keyboardHidden"
android:theme="@*android:style/Theme.NoTitleBar"
android:launchMode="singleTop"
android:windowSoftInputMode="stateHidden"/>
答案 14 :(得分:3)
将此代码放在您的java文件中,并在edittext上传递object的参数,
private void setHideSoftKeyboard(EditText editText){
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(editText.getWindowToken(), 0);
}
答案 15 :(得分:2)
也尝试这个
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
}
});
答案 16 :(得分:1)
如果您的应用程序定位 Android API Level 21或更高级别,则可以使用默认方法。
editTextObj.setShowSoftInputOnFocus(false);
确保在EditText
XML标记中设置了以下代码。
<EditText
....
android:enabled="true"
android:focusable="true" />
答案 17 :(得分:1)
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
它会起作用
答案 18 :(得分:1)
试试这个。
首先在你可搜索的xml中,字段(名称和提示等)放置@string
而不是文字字符串。
然后方法onCreateOptionsMenu
,它必须有一个ComponentName
对象,包含您的包名和已完成的类名(包名称) - 如果具有SearchView
组件的活动是与谷歌Android开发人员说的显示搜索结果使用getComponentName()
相同。
我尝试了很多解决方案,经过多次努力,这个解决方案对我有用。
答案 19 :(得分:1)
这就是我所做的:
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;
}
});
答案 20 :(得分:1)
使用SOFT_INPUT_STATE_ALWAYS_HIDDEN代替SOFT_INPUT_STATE_HIDDEN
this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
答案 21 :(得分:0)
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
答案 22 :(得分:0)
添加您的活动 此属性
android:windowSoftInputMode="stateHidden"