我有一个比较简单的问题。我有一个带有很多EditText的活动。当我打开活动时,它会自动将焦点聚焦到第一个EditText并显示虚拟键盘。
我该如何防止这种情况发生?
我有一个比较简单的问题。我有一个带有很多EditText的活动。当我打开活动时,它会自动将焦点聚焦到第一个EditText并显示虚拟键盘。
我该如何防止这种情况发生?
在XML文件的layout标签中使用这些属性:
android:focusable="true"
android:focusableInTouchMode="true"
如其他评论成员所述,它不适用于ScrollView
,因此您需要将这些属性添加到ScrollView
的主子项中。
你可以将以下内容添加到你的Android清单文件中的Activity标签内:
android:windowSoftInputMode="stateHidden|adjustResize"
android:windowSoftInputMode="stateHidden|adjustPan"
。 - ArtiomLK我在这里描述了几个实现,但现在我已经将以下属性添加到我的Activity
的AndroidManifest.xml
中:
android:windowSoftInputMode="stateAlwaysHidden"
片段
,这仍然是一种简单的方法。"stateAlwaysHidden" 当活动的主窗口具有输入焦点时,软键盘始终隐藏。
ListView
,您也可以这样做:ListView.requestFocus();
在你的onResume()中,可以使用代码editText
来获取焦点。
我知道这个问题已经有答案了,但我提供了一个对我有效的替代解决方案 :)
在您的Activity代码中使用以下内容:
@Override
public void onCreate(Bundle savedInstanceState) {
getWindow().setSoftInputMode(
WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
}
https://dev59.com/n2445IYBdhLWcg3w3Nsf#11627976。
@Override
public void onCreate(Bundle savedInstanceState) {
getWindow().setSoftInputMode(
WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
}
但应该是SOFT_INPUT_STATE_HIDDEN而不是SOFT_INPUT_STATE_ALWAYS_VISIBLE
我遇到了类似的问题,即使在切换选项卡时,键盘也会自动弹出并保持打开状态,在平板电脑上使用Android 3.2.1。请使用以下方法:
public void setEditTextFocus(EditText searchEditText, boolean isFocused)
{
searchEditText.setCursorVisible(isFocused);
searchEditText.setFocusable(isFocused);
searchEditText.setFocusableInTouchMode(isFocused);
if (isFocused) {
searchEditText.requestFocus();
} else {
InputMethodManager inputManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
inputManager.hideSoftInputFromWindow(searchEditText.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS );
}
}
myEditText.setOnTouchListener(new EditText.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
setEditTextFocus(myEditText, true);
return false;
}
});
针对OnEditorActionListener
中的每个EditText
:
myEditText.setOnEditorActionListener(new EditText.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView arg0, int arg1, KeyEvent arg2) {
.......
setEditTextFocus(myEditText, false);
return false;
}
});
对于layout xml
中的每个EditText
:
android:imeOptions="actionDone"
android:inputType="numberDecimal|numberSigned" // Or something else
可能还有更多的代码优化空间。
((InputMethodManager)getActivity().getSystemService("input_method")).hideSoftInputFromWindow(this.edittxt.getWindowToken(), 0);
我找到了一个简单的解决方案,对我很有用。在您的父布局中设置这些属性:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/mainLayout"
android:descendantFocusability="beforeDescendants"
android:focusableInTouchMode="true" >
现在,当活动启动时,此主布局将默认获得焦点。
此外,我们可以通过再次将焦点放在主布局上,在运行时从子视图中移除焦点,就像这样:
findViewById(R.id.mainLayout).requestFocus();
希望这对你有用。
这是我正在使用的解决方案,虽然不是最好的解决方案,但对我来说效果很好。
editComment.setFocusableInTouchMode(false);
editComment.setOnTouchListener(new OnTouchListener(){
@Override
public boolean onTouch(View v, MotionEvent event)
{
// TODO Auto-generated method stub
editComment.setFocusableInTouchMode(true);
editComment.requestFocus() ;
return false;
}});