如何防止关注Activity的开始

时间:2017-09-29 11:48:54

标签: android android-softkeyboard

我的Activity只有一个EdtiText。当Activity开始时,EditText会聚焦,并显示软键盘。这似乎发生在onResume之后,因为当我以编程方式隐藏onResume中的键盘时,它无法正常工作。当我这样做时:

@Override
protected void onResume() {
    super.onResume();

    new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {
            InputMethodManager imm = (InputMethodManager) getSystemService(Activity.INPUT_METHOD_SERVICE);
            //Find the currently focused view, so we can grab the correct window token from it.
            //If no view currently has focus, create a new one, just so we can grab a window token from it
            imm.hideSoftInputFromWindow(etBarcode.getWindowToken(), 0);
        }
    }, 500);
}
它隐藏了它(很快就出现了)。

EditText上是否有可用于防止键盘弹出的事件?或者其他一些阻止它显示的方式?

更新 focusableInTouchMode无法满足我的需求,因为当设置为true键盘弹出时,设置为false时无法关注所有。

4 个答案:

答案 0 :(得分:3)

// Add following code in activity onCreate
        this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);

答案 1 :(得分:0)

对于父版面android:focusableInTouchMode="true"

答案 2 :(得分:0)

您可以设置布局的属性,如

android:descendantFocusability="beforeDescendants"
android:focusableInTouchMode="true"

答案 3 :(得分:0)

问题非常复杂,因为它是关于获得焦点的视图,以及所有布局如何处理它,关于触摸模式是可聚焦的,以及最后但并非最不重要的软​​键盘处理方式。 但这对我有用:

在清单中:

android:windowSoftInputMode="stateHidden|stateAlwaysHidden"

布局:

android:focusable="true"
android:focusableInTouchMode="true"

最后但并非最不重要的是,触摸侦听器设置为EditText以防止软键盘在触摸后显示:

        mMyText.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            // forward the touch event to the view (for instance edit text will update the cursor to the touched position), then
            // prevent the soft keyboard from popping up and consume the event
            v.onTouchEvent(event);
            disableSoftKeyboard(MyActivity.this);
            return true;
        }
    });

虽然该方法或多或少地做了你正在做的事情:

public void disableSoftKeyboard(@NonNull Activity activity) {
    View view = activity.getCurrentFocus();
    if (view != null) {
        InputMethodManager imm = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);
        imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
    } else {
        activity.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
    }
}

希望它有所帮助,而且我没有忘记任何事情:)