简体   繁体   English

隐藏和显示软键盘-同时

[英]Hide and Show the Soft Keyboard - simultaneously

If I may to ask almost the same question here from this topic 如果我可以从这个话题在这里问几乎相同的问题

I've added in my activity_main.xml file: 我已经在我的activity_main.xml文件中添加了:

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

activity_main.xml: activity_main.xml中:

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout 
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:focusable="true"
android:focusableInTouchMode="true"
tools:context="com.example.stefancvetkovic.stefantest001.MainActivity">

<EditText
    android:id="@+id/txtScanedResult"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:ems="10"
    android:inputType="textPersonName"
    tools:layout_editor_absoluteX="16dp"
    tools:layout_editor_absoluteY="16dp" />
</android.support.constraint.ConstraintLayout>

And it works fine, but when I want to hide my keyboard on finish event, the keyboard stays opened. 它可以正常工作,但是当我想在完成事件时隐藏键盘时,键盘保持打开状态。

MainActivity.java: MainActivity.java:

@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    ((EditText)findViewById(R.id.txtScanedResult)).setOnEditorActionListener(
            new EditText.OnEditorActionListener() {
                @Override
                public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
                    if (actionId == EditorInfo.IME_ACTION_SEARCH ||
                            actionId == EditorInfo.IME_ACTION_DONE ||
                            event != null &&
                                    event.getAction() == KeyEvent.ACTION_DOWN &&
                                    event.getKeyCode() == KeyEvent.KEYCODE_ENTER) {
                        if (event == null || !event.isShiftPressed()) {

                            // the user is done typing.
                                //HIDE KEYBOARD
                            EditText edtView=(EditText)findViewById(R.id.txtScanedResult);
                            edtView.setInputType((InputType.TYPE_NULL));
                                //
                            Toast.makeText(getApplicationContext(),"Voila!",Toast.LENGTH_SHORT)
                                    .show();
                            return true; // consume.
                        }
                    }
                    return false; // pass on to other listeners.
                }
            });
}

Toast works perfectly on finish event, but keyboard stays opened. 吐司在完成事件时工作完美,但键盘保持打开状态。 Hoiw can I manage to be initialy closed keyboard on the load, and to be hidden on finishEvent? Hoiw我可以设法在加载时初始关闭键盘,并在finishEvent上隐藏吗? I am running in emulator on Android 5.1 我在Android 5.1的模拟器中运行

Try this one 试试这个

/**
     * This function is used to hide soft keyboard
     *
     * @param context mContext
     * @param view    view for which keyboard is open
     */
    public static void hideSoftInput(Context context, View view) {
        if (view != null) {
            InputMethodManager inputMethodManager = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
            if (!inputMethodManager.isActive()) {
                return;
            }
            inputMethodManager.hideSoftInputFromWindow(view.getWindowToken(), 0);
        }
    }

    /**
     * This function is used to hide soft keyboard
     *
     * @param activity activity
     */
    public static void hideSoftInput(Activity activity) {
        try {
            if (activity != null) {
                View focusedView = activity.getCurrentFocus();
                hideSoftInput(activity, focusedView);
            }
        } catch (Throwable t) {
            CustomLogHandler.printErrorlog(t);
        }
    }

    /**
     * This function is used to show soft keyboard
     *
     * @param activity activity
     */
    public static void showSoftInput(Activity activity) {
        try {
            if (activity != null) {
                View focusedView = activity.getCurrentFocus();
                if (focusedView != null) {
                    InputMethodManager inputMethodManager = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);
                    inputMethodManager.showSoftInput(focusedView, InputMethodManager.SHOW_IMPLICIT);
                }
            }
        } catch (Throwable t) {
            CustomLogHandler.printErrorlog(t);
        }
    }

    /**
     * This function is used to show soft keyboard
     *
     * @param view view for which soft keyboard need to be opened
     */
    public static void showSoftInput(final View view) {
        try {
            if (view == null) {
                return;
            }

                    view.requestFocus();
                    InputMethodManager inputManager = (InputMethodManager) view.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
                    inputManager.showSoftInput(view, 0);

        } catch (Exception e) {
            CustomLogHandler.printErrorlog(e);
        }
    }

or try 或尝试

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);

Call it before showing toast. 在吐司之前先叫它。

 public void hideKeyboard(Activity context) {
    // Check if no view has focus:
    View view = context.getCurrentFocus();
    if (view != null) {
        InputMethodManager inputManager = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
        inputManager.hideSoftInputFromWindow(view.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
    }
}

Try this code: 试试这个代码:

/**
 * Hides the soft keyboard
 */
public void hideSoftKeyboard() {
    if(getCurrentFocus()!=null) {
        InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
        inputMethodManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
    }
}

/**
 * Shows the soft keyboard
 */
public void showSoftKeyboard(View view) {
    InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
    view.requestFocus();
    inputMethodManager.showSoftInput(view, 0);
}

or do this: 或执行以下操作:

In the AndroidManifest.xml: 在AndroidManifest.xml中:

<activity android:name="com.your.package.ActivityName"
  android:windowSoftInputMode="stateHidden"  />

or try: 或尝试:

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN)‌​;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM