Подтвердить что ты не робот

Выключение мягкой клавиатуры

Я пытаюсь заставить Soft Keyboard открыть в Activity и захватить все, что введено, так как я хочу сам обрабатывать вход, у меня нет EditText. В настоящее время я пробовал это, но он не работает. Я бы хотел, чтобы Soft Keyboard открылась ниже mAnswerTextView (Примечание: это TextView not EditText).

    InputMethodManager mgr = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
    // only will trigger it if no physical keyboard is open
    mgr.showSoftInput(mAnswerTextView, InputMethodManager.SHOW_IMPLICIT);
  • Как заставить открывать Soft Keyboard
  • Как убрать все введенное, чтобы я мог обрабатывать каждый символ. Я хотел бы очистить каждый символ от Soft Keyboard после того, как я его обработал. т.е. пользователь не должен иметь возможность вводить целые слова в Soft Keyboard.
4b9b3361

Ответ 1

попробуйте это, чтобы заставить открытую мягкую клавиатуру:

((InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE)).toggleSoftInput(InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_IMPLICIT_ONLY);

то вы можете использовать этот код для закрытия клавиатуры:

((InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE)).hideSoftInputFromWindow(_pay_box_helper.getWindowToken(), 0);

Ответ 2

Вероятно, вам нужно иметь редактируемую текстовую область для фокусировки. Однако, возможно, у вас есть один невидимый или прозрачный фон без курсора. Возможно, вам придется поиграть с настройками фокусировки для представления.

Используйте TextWatcher для проверки изменений в этом EditText с addTextChangedListener, или если вам нужен крючок с более низким уровнем, установите прослушиватель ключевых слов textview с помощью метода setOnKeyListener(). См. Документация KeyListener.

Используйте этот вызов, чтобы открыть мягкую клавиатуру:

((InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE))
    .showSoftInput(myEditText, InputMethodManager.SHOW_FORCED);

и этот, чтобы закрыть его:

((InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE))
    .hideSoftInputFromWindow(myEditText.getWindowToken(), 0);

Обратите внимание, что это действительно не рекомендуется - принудительное открытие клавиатуры является довольно грязным. Каков ваш прецедент, который действительно требует вашего ввода пользователем без нормального поля редактирования и требует питания пользователя по принципу "ключ за ключ" без повторения его?

Ответ 3

Чтобы заставить клавиатуру открыться, я использовал

this.getWindow().setSoftInputMode(LayoutParams.SOFT_INPUT_STATE_VISIBLE);

это сработало для меня.

Ответ 4

Иногда другие ответы не будут работать.
Вот еще один способ.

Это заставит клавиатуру отображать, когда действие начинается с прослушивания фокуса окна. onWindowFocusChanged() он очистится и запросит фокус EditText, затем установите режим мягкого ввода на видимый и установите выделение в текст в поле. Это всегда должно работать, если вы вызываете его из действия.

@Override
public void onWindowFocusChanged(boolean hasFocus) {
    super.onWindowFocusChanged(hasFocus);
    if (hasFocus) {
        mEditText.clearFocus();
        mEditText.requestFocus();
        getWindow().setSoftInputMode(LayoutParams.SOFT_INPUT_STATE_VISIBLE);
        mEditText.setSelection(mEditText.getText().toString().length());
    }
}

Вам также может понадобиться

mEditText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
        @Override
        public void onFocusChange(View v, boolean hasFocus) {
            if (hasFocus) {
                InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
                imm.showSoftInput(mEditText, InputMethodManager.SHOW_IMPLICIT);
            }
        }
    });

Изменить: Я также видел, что клавиатура не открыта внутри вложенных фрагментов, остерегайтесь таких ситуаций.

Ответ 5

если вы хотите управлять мягкой клавиатурой внутри действия, используйте этот код:

//create soft keyboard object
InputMethodManager imm = (InputMethodManager)this.getSystemService(INPUT_METHOD_SERVICE);

//1.USE
your_view.setFocusableInTouchMode(true); //Enable touch soft keyboard to this view
//or
your_view.setFocusable(true); //Enable keyboard to this view
imm.showInputMethod(your_view, InputMethodManager.SHOW_IMPLICIT);

//2.USE show keyboard if is hidden or hide if it is shown
imm.toggleSoftInputFromWindow(your_view.getWindowToken(),InputMethodManager.SHOW_IMPLICIT, InputMethodManager.HIDE_IMPLICIT_ONLY);
//or
imm.toggleSoftInputFromWindow(InputMethodManager.SHOW_IMPLICIT, InputMethodManager.HIDE_IMPLICIT_ONLY);

//3.USE (you cannot control imm)
this.getWindow().setSoftInputMode(LayoutParams.SOFT_INPUT_STATE_VISIBLE);

//4.USE (with Dialog)
Dialog d = new Dialog(this, android.R.style.Theme_Panel);
d.getWindow().setTitle(null);
d.setSoftInputMode(LayoutParams.SOFT_INPUT_STATE_VISIBLE);
d.setOnKeyListener(keyListener);
d.setCanceledOnTouchOutside(true);
d.setCancelable(true);
d.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
d.show();

//to hide keyboard call:
d.dismiss();
//if you want get soft keyboard visibility call:
d.isShowing();

Ответ 6

К сожалению, насколько мне хотелось бы проголосовать за один из ответов, никто не работал у меня. Похоже, решение заключается в том, чтобы дождаться завершения фазы макета. В приведенном ниже коде обратите внимание, как я проверяю, возвращает ли метод showKeyboard TRUE, и когда я удаляю глобальный приемник макетов. Не делая этого, он попал и промахнулся. Теперь это работает отлично.

Вам нужно сделать ниже идеально в onResume()

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

    ViewTreeObserver vto = txtTaskTitle.getViewTreeObserver();
            vto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener()
            {
                @Override
                public void onGlobalLayout()
                {
                    if (txtTaskTitle.requestFocus())
                    {
                        if (showKeyboard(getContext(), txtTaskTitle))
                        {
                            txtTaskTitle.getViewTreeObserver().removeOnGlobalLayoutListener(this);
                        }
                    }
                }
            });
}

public static boolean showKeyboard(Context context, EditText target)
{
        if (context == null || target == null)
        {
            return false;
        }

        InputMethodManager imm = getInputMethodManager(context);

        ((InputMethodManager)context.getSystemService(Context.INPUT_METHOD_SERVICE)).showSoftInput(target, InputMethodManager.SHOW_FORCED);

        boolean didShowKeyboard = imm.showSoftInput(target, InputMethodManager.SHOW_FORCED);
        if (!didShowKeyboard)
        {
            didShowKeyboard = ((InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE)).showSoftInput(target, InputMethodManager.SHOW_FORCED);
        }
        return didShowKeyboard;
}

Ответ 7

if(search.getText().toString().trim().isEmpty()) {
    InputMethodManager imm = (InputMethodManager)getSystemService(
              Context.INPUT_METHOD_SERVICE);
    imm.hideSoftInputFromWindow(search.getWindowToken(), 0);
}

Ответ 8

Я тестировал и это работает:

... // показать мягкую клавиатуру

imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);

//, чтобы скрыть его, снова вызовите метод

imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);

Ответ 9

Работает отлично.........

edt_searchfilter_searchtext.setOnFocusChangeListener(new View.OnFocusChangeListener() {
        @Override
        public void onFocusChange(View v, boolean hasFocus) {
            if(hasFocus){
                edt_searchfilter_searchtext.post(new Runnable() {
                    @Override
                    public void run() {
                        InputMethodManager imm = (InputMethodManager) getFragmentActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
                        imm.showSoftInput(edt_searchfilter_searchtext, InputMethodManager.SHOW_IMPLICIT);
                    }
                });
            }
        }
    });

Ниже строки, когда вы хотите открыть клавиатуру

 edt_searchfilter_searchtext.requestFocus();

Ответ 10

Просто, используя добавление 2 строк, будет работать как шарм:

Если вы используете XML

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

Else в Java:

view.setFocusableInTouchMode(true);
view.requestFocus();

Ответ 11

  Для пользователя kotlin

Весь кредит идет на ответ дмитрия

Откройте клавиатуру во фрагменте.

Я передал переменную mainActivity в fragment constructor согласно моему требованию, возможно, этот хак/патч не рекомендуется согласно AndroidGuidLines (ну, я не знаю).

Но здесь мы идем...

    @SuppressLint("ValidFragment")
    class MyDemoFragment(private val mainActivity: MainActivity) : Fragment() {

        // EditText declaration
        private lateinit var etMyEditText: EditText

        override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
            val view = inflater.inflate(R.layout.fragment_my_demo, container, false)

            // EditText initialisation
            etMyEditText = view.findViewById(R.id.etMyEditText)
            // This line will open KeyBoard
            (mainActivity.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager).toggleSoftInput(InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_IMPLICIT_ONLY)
            // Requesting cursor focus   
            etMyEditText.requestFocus()

            return view
        }
    }

Ответ 12

Вы можете использовать этот класс KeyboardHelper.java

    import android.content.Context;
    import android.view.View;
    import android.view.inputmethod.InputMethodManager;
    import android.widget.EditText;

    /**
     * Created by khanhamza on 06-Mar-17.
     */

    public class KeyboardHelper {

        public static void hideSoftKeyboard(Context context, View view) {
            if (context == null || view == null) {
                return;
            }

            InputMethodManager imm = (InputMethodManager) context
                    .getSystemService(Context.INPUT_METHOD_SERVICE);
            imm.hideSoftInputFromWindow(view.getWindowToken(), 0);

        }


        public static void hideSoftKeyboardForced(Context context, View view) {
            if (context == null) {


  return;
        }

        InputMethodManager imm = (InputMethodManager) context
                .getSystemService(Context.INPUT_METHOD_SERVICE);
        imm.hideSoftInputFromInputMethod(view.getWindowToken(), 0);

    }

    public static void hideSoftKeyboard(Context context, EditText editText) {
        if (context == null) {
            return;
        }
        InputMethodManager imm = (InputMethodManager) context
                .getSystemService(Context.INPUT_METHOD_SERVICE);
        imm.hideSoftInputFromWindow(editText.getWindowToken(), InputMethodManager.HIDE_IMPLICIT_ONLY);
    }

    public static void showSoftKeyboard(Context context, EditText editText) {

        if (context == null) {
            return;
        }

        InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
        imm.showSoftInput(editText, InputMethodManager.SHOW_IMPLICIT);
        editText.requestFocus();
    }

    public static void showSoftKeyboardForcefully(Context context, EditText editText) {

        if (context == null) {
            return;
        }

        InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
        imm.showSoftInput(editText, InputMethodManager.SHOW_FORCED);
        editText.requestFocus();
    }




}