我在EditText
中有一个Activity
,我希望它在我打开Activity
时处于活动状态并打开软键盘。以下是xml
的{{1}}:
EditText
我已将[{1}}用于我拥有此<EditText
android:background="@null"
android:cursorVisible="true"
android:elegantTextHeight="true"
android:enabled="true"
android:focusable="true"
android:hint="Search"
android:id="@+id/editText11"
android:inputType="textNoSuggestions|textCapSentences"
android:layout_centerVertical="true"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:singleLine="true"
android:textColor="#000000"
android:textCursorDrawable="@null" />
的活动。
问题是,当我按android:windowSoftInputMode="stateVisible"
一次时,键盘不会隐藏(理想情况下,它会隐藏在所有其他EditText
中),当我再次按back
时,它会关闭EditText
。在第一次back
新闻发布会上,我是不在第二次Activity
新闻时接到back
的来电,我这样做。为什么会发生这种行为以及如何解决?
编辑我想要的是,如果键盘打开,按下键应关闭键盘,如果键盘未打开,则关闭活动。
答案 0 :(得分:10)
试试这个......
创建名为Util的类并输入此代码
public static void hideSoftKeyboard(Activity activity) {
final InputMethodManager inputMethodManager = (InputMethodManager) activity.getSystemService(Activity.INPUT_METHOD_SERVICE);
if (inputMethodManager.isActive()) {
if (activity.getCurrentFocus() != null) {
inputMethodManager.hideSoftInputFromWindow(activity.getCurrentFocus().getWindowToken(), 0);
}
}
}
并调用Activity
的onBackPressed()答案 1 :(得分:2)
我在BaseActivity.java中添加了以下代码
post_updated
答案 2 :(得分:1)
试试这个,
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (event.getAction() == KeyEvent.ACTION_DOWN) {
switch (keyCode) {
case KeyEvent.KEYCODE_BACK:
//useful for hiding the soft-keyboard is:
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
return true;
}
}
return super.onKeyDown(keyCode, event);
}
这可能有助于你
答案 3 :(得分:-1)
满足您的要求:
如果键盘打开,按下后应关闭键盘,如果 键盘未打开,然后关闭活动
我测试过我的代码工作正常。
第1步:如下所示创建CustomEditText
。
<com.yourpackage.yourappname.CustomEditText
android:id="@+id/edittext"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
第2步:创建CustomEditText.java
课程。
public class CustomEditText extends EditText {
Context context;
private static Activity mSearchActivity;;
public CustomEditText(Context context, AttributeSet attrs) {
super(context, attrs);
this.context = context;
}
@Override
public boolean dispatchKeyEventPreIme(KeyEvent event) {
if(mSearchActivity != null && event.getKeyCode() == KeyEvent.KEYCODE_BACK){
KeyEvent.DispatcherState state = getKeyDispatcherState();
if(state != null){
if(event.getAction() == KeyEvent.ACTION_DOWN && event.getRepeatCount() == 0){
InputMethodManager mgr = (InputMethodManager)
context.getSystemService(Context.INPUT_METHOD_SERVICE);
mgr.hideSoftInputFromWindow(this.getWindowToken(), 0);
}
else if(event.getAction() == KeyEvent.ACTION_UP && !event.isCanceled() && state.isTracking(event)){
mSearchActivity.onBackPressed();
return true;
}
}
}
return super.dispatchKeyEventPreIme(event);
}
}
第3步:在您的活动中初始化CustomEditText并隐藏KeyBoard,如下所示。
CustomEditText editText = (CustomEditText) findViewById(R.id.edittext);
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(editText, InputMethodManager.SHOW_IMPLICIT);
第4步:在您的活动中只需Override
onBackPressed()
方法。
@Override
public void onBackPressed() {
super.onBackPressed();
}