Android - softKeyboard隐藏和显示

时间:2016-09-05 02:52:48

标签: android hide toolbar android-softkeyboard back

我有一个editText和一个工具栏。当我关注editText时,我隐藏工具栏并显示softKeyboard,以便用户可以输入文本。

问题是当按下后退键时,我添加了一个按下后退的方法再次显示工具栏:

@Override
    public void onBackPressed() {
        //show toolbar
        toolbar_bottom.setVisibility(View.VISIBLE);

    }

但它首先隐藏了键盘,直到第二次按下时我的工具栏再次可见。有没有办法隐藏键盘并只需按一下就可以看到工具栏?

3 个答案:

答案 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);
   }
}