Android: отключить программную клавиатуру на всех EditTexts - PullRequest
22 голосов
/ 27 апреля 2011

Я работаю над диалогом на Android с несколькими EditText с. Я поставил эту строку на onCreate(), чтобы отключить программную клавиатуру:

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

Проблема в том, что он работает только тогда, когда диалоговое окно появляется и ничего не делает. Когда я перехожу к следующему EditText, клавиатура появляется и не гаснет.

У кого-нибудь есть идеи, как решить эту проблему?

Ответы [ 13 ]

31 голосов
/ 07 июля 2011

Если вы посмотрите на реализацию метода onCheckIsTextEditor () (в TextView), это будет выглядеть так:

@Override
public boolean onCheckIsTextEditor() {
    return mInputType != EditorInfo.TYPE_NULL;
}

Это означает, что вам не нужно создавать подклассы, вы можете просто:

((EditText) findViewById(R.id.editText1)).setInputType(InputType.TYPE_NULL); 

Я попытался установить android: inputType = "none" в макете xml, но у меня это не сработало, поэтому я сделал это программно.

24 голосов
/ 27 апреля 2011

создайте свой собственный класс, который расширяет EditText и переопределяет onCheckIsTextEditor():

public class NoImeEditText extends EditText {
    public NoImeEditText(Context context, AttributeSet attrs) {
        super(context, attrs);
    }
    @Override
    public boolean onCheckIsTextEditor() {
        return false;
    }
}
20 голосов
/ 10 мая 2013

Попробуйте это ..

edittext.setInputType(InputType.TYPE_NULL);      
if (android.os.Build.VERSION.SDK_INT >= 11)   
{  
    edittext.setRawInputType(InputType.TYPE_CLASS_TEXT);  
    edittext.setTextIsSelectable(true);  
}
5 голосов
/ 18 октября 2012

Я искал решения для этого весь день, и я столкнулся с этим подходом.Я помещаю это здесь, потому что это, кажется, отвечает на этот вопрос отлично.

EditText et = ... // your EditText
et.setKeyListener(null) //makes the EditText non-editable so, it acts like a TextView.

Нет необходимости в подклассе.Основное различие между этим и тем, что ваш EditText не фокусируется, состоит в том, что у EditText все еще есть свой собственный курсор - вы можете выбирать текст и т. Д. Все, что он делает, это запрещает IME выскакивать его собственной программной клавиатуры.

4 голосов
/ 22 июля 2012

Прошло некоторое время с этого поста, но вот простой метод, который работал для меня: в xml, в свойствах EditText сделайте: android:focusable="false".Теперь клавиатура не будет всплывать, даже если пользователь нажимает на нее.Это полезно, если вы предоставляете собственную клавиатуру.

2 голосов
/ 14 апреля 2016

Звоните TextView.setShowSoftInputOnFocus(false). Этот метод документирован начиная с уровня API 21, но он уже существует с уровня API 16 (он просто скрыт от JavaDoc). Я использую его с уровнем API 16 в AlertDialog в сочетании с dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN).

На уровне API 14 есть скрытый метод setSoftInputShownOnFocus(), который, кажется, имеет ту же цель, но я не проверял это.

Преимущество перед InputType.TYPE_NULL заключается в том, что можно использовать все обычные типы ввода (например, для ввода пароля), а событие касания помещает курсор в правильное место в тексте.

1 голос
/ 20 марта 2013

Поместите это в метод создания

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
1 голос
/ 13 марта 2013

Знаете, уже слишком поздно, но пробовали ли вы следующую настройку EditText в макете?

android:inputType="none"

ОБНОВЛЕНИЕ

Использование,

editText.setInputType(InputType.TYPE_NULL)
editText.setFocusable(false)
0 голосов
/ 21 октября 2015

Вы можете сделать это:

textView.setOnClickListener(null);

Это отключит клавиатуру для textView, и щелчок больше не будет работать.

0 голосов
/ 18 мая 2015

при установке EditText focusable-> false, клавиатура не открывается при нажатии

<EditText
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:focusable="false" />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...