Как отключить программную клавиатуру, чтобы она появлялась, когда пользователь нажимает на EditText? - PullRequest
0 голосов
/ 03 октября 2019

Я создал пользовательскую клавиатуру с помощью CardView, поэтому мне не нужна программная клавиатура, когда у меня есть EditText. Дело в том, что когда я нажимаю на EditText, появляется виртуальная клавиатура, есть ли способ отключить виртуальную клавиатуру?

Вот мой фрагмент кода:

public class FragmentQuestion1 extends Fragment {

    private EditText mEditTextQuestion1;

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

        View view = inflater.inflate(R.layout.fragment_question_1, container, false);

        mEditTextQuestion1 = view.findViewById(R.id.edit_text_question_1);
        MyKeyboard keyboard = view.findViewById(R.id.keyboard);
        mEditTextQuestion1.setRawInputType(InputType.TYPE_CLASS_TEXT);
        mEditTextQuestion1.setTextIsSelectable(true);

        InputConnection ic = mEditTextQuestion1.onCreateInputConnection(new EditorInfo());
        keyboard.setInputConnection(ic);

        mEditTextQuestion1.addTextChangedListener(new NumberTextWatcher(mEditTextQuestion1));

mEditTextQuestion1.setOnFocusChangeListener(new View.OnFocusChangeListener() {
            @Override
            public void onFocusChange(View view, boolean hasFocus) {
                if (hasFocus) {
                    getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
                } else {

                }
            }
        });

        return view;
    }

Воткак я использовал EditText в моем XML-файле:

<EditText
            android:id="@+id/edit_text_question_1"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_marginLeft="8dp"
            android:layout_marginRight="8dp"
            android:backgroundTint="#FFFFFF"
            android:inputType="number"
            android:gravity="center"
            android:focusable="true"
            android:focusableInTouchMode="true"
            android:textIsSelectable="true"/>

Ответы [ 3 ]

1 голос
/ 03 октября 2019

Редактировать: Извините, кажется, что изменение фокуса на раннее, так как этот метод позволяет скрыть программную клавиатуру, чтобы она не отображалась.

Использование onClickListener работает лучше, но вы, вероятно, кратко увидите клавиатуру.

А затем скрыть клавиатуру с помощью InputMethodManager

См. Закрыть / скрыть программную клавиатуру Android

Даже onClick Кажется ненадежным из-за проблем с синхронизацией.

Но пример кода, который работает большую часть времени.


public class MainActivity extends AppCompatActivity {


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        final EditText message = (EditText) findViewById(R.id.message);

        message.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                hideSoftKeyboard(v);
            }
        });

    }

    public void hideSoftKeyboard(View view) {
        InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
        imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
    }
}
0 голосов
/ 06 октября 2019

У меня была очень похожая проблема, и я смог решить ее следующим образом.

В манифесте Android вы должны добавить эти строки в операцию

   <activity
        android:name=".activities.YourActivity"
        android:windowSoftInputMode="adjustResize|stateAlwaysHidden" />

В классе деятельности (Java) добавьте это в метод onResume. Это предотвратит появление клавиатуры при возобновлении активности

@Override
    protected void onResume() {
        super.onResume();
        this.getWindow().setSoftInputMode(WindowManager.
                LayoutParams.SOFT_INPUT_STATE_HIDDEN); //hide keyboard when your activity is in use
    }

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

private void setupSpinItemsCustomKeyboard() {
        Helper.hideAllKeyboard(YourActivity.this);
        fromEditText.setShowSoftInputOnFocus(false); //no response on keyboard touch
        fromEditText.requestFocus();
    }

и это фактически скрывает клавиатуру

public static void hideAllKeyboard(Activity activity) {
        View view = activity.getCurrentFocus();
        if (view != null) {
            InputMethodManager imm = (InputMethodManager) activity.getSystemService(
                    Context.INPUT_METHOD_SERVICE);
            assert imm != null;
            imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
        }
    }
0 голосов
/ 05 октября 2019

Я нашел решение, которое работает отлично и довольно просто:

Просто используйте mEditTextQuestion1.setEnabled(false); в методе inCreateView, чтобы EditText не был кликабельным. В моем случае цвет EditText изменился на более темный, поэтому я добавил android:textColor="#000" в свой XML-файл.

...