我有一个editText和一个工具栏。当我关注editText时,我隐藏工具栏并显示softKeyboard,以便用户可以输入文本。
问题是当按下后退键时,我添加了一个按下后退的方法再次显示工具栏:
@Override
public void onBackPressed() {
//show toolbar
toolbar_bottom.setVisibility(View.VISIBLE);
}
但它首先隐藏了键盘,直到第二次按下时我的工具栏再次可见。有没有办法隐藏键盘并只需按一下就可以看到工具栏?
答案 0 :(得分:0)
你可以覆盖onKeyDown方法
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
HideYourToolbar();
HideYourSoftKeyboard();
return false;
}
return super.onKeyDown(keyCode, event);
}
答案 1 :(得分:0)
这是因为当软键盘可见时,按下后退按钮不会触发你的onBackPressed,因为键盘将在你的活动之前接收事件并消耗该事件。
我认为这种行为在Android应用中很常见且正常,大多数人都会毫无疑问地接受这种行为。
无论如何,如果您希望一键式完成,您必须在[键盘变为不可见]时捕捉事件。
这在Android中有些棘手 我认为没有完美的解决方案,但有一些解决方法 Check this link.
答案 2 :(得分:0)
我已经找到了解决问题的方法。希望它可以帮助别人。
public class CustomET extends EditText {
Context context;
public CustomEditText(Context context, AttributeSet attrs) {
super(context, attrs);
this.context = context;
}
@Override
public boolean onKeyPreIme(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
InputMethodManager mgr = (InputMethodManager)
context.getSystemService(Context.INPUT_METHOD_SERVICE);
mgr.hideSoftInputFromWindow(this.getWindowToken(), 0);
//show toolbar
}
return false;
}
我的xml:
<com.limecream.CustomEditText
android:id="@+id/CEditText"
android:layout_height="wrap_content"
android:layout_width="match_parent"/>
我的活动
public class MainActivity extends Activity {
private CustomEditText editText;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
editText = (CustomEditText) findViewById(R.id.CEditText);
}
}