Android EditText: прослушиватели, символы новой строки и фокус

#android #android-edittext #onfocus

#Android #android-edittext #onfocus

Вопрос:

В настоящее время у меня есть поле edittext, которое, когда пользователь нажимает enter, делает в основном то, что я хочу, проверяет формат IP-адреса и сообщает пользователю, если он неверен. Как мне сделать так, чтобы, когда пользователь нажимает enter, он проверял его, как и должно быть, не вводил символ новой строки?

Вот мой код для этого.

     public boolean onEditorAction(TextView arg0, int arg1, KeyEvent arg2) {
        if(validateIPaddress(m_etIPAddress.getText().toString()))
        {
            ConfigData.m_IPAddress = m_etIPAddress.getText().toString();
        }
        else
        {
            showAlertDialog("Invalid IP Addressn Example: n255.255.255.255n0.0.0.0","Error: ");
            m_etIPAddress.setText(ConfigData.m_IPAddress);
            m_etIPAddress.requestFocus();
        }   
        return false;
    }
  

Другая проблема, с которой я сталкиваюсь, заключается в том, что при ложном условии проверки не будет вызвана программная клавиатура, позволяющая пользователю повторно отредактировать это текстовое поле. Если пользователь нажимает на другой редактируемый текст, окно фокусируется на нем и позволяет пользователю редактировать второе текстовое поле, сохраняя при этом «зеленый контур» вокруг исходного редактируемого текста. Есть ли способ это исправить?

Редактировать:

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

 m_etIPAddress.setText(ConfigData.m_IPAddress); 
  

все, что указано в этом поле, должно автоматически перезаписываться на статический IP, сохраненный в ConfigData. (мой класс настроек) и я думаю, что фокус может сработать, проблема в том, что после requestFocus этот EditText показывает, что у него есть фокус, но он не отвечает.

Я могу щелкнуть по другим редактируемым текстам и изменить их, пока он по-прежнему отображает контур фокусировки на редактируемом тексте IP. Если я нажимаю на текст редактирования IP, это фактически ничего не делает. Это немного странно.

Ответ №1:

Я думаю, что для вашего EditText, создающего новую строку, вы можете сделать это, заменив кнопку ввода на кнопку готово, подобную этой :

 yourEditText.setImeOptions(EditorInfo.IME_ACTION_DONE);
  

И для этого вы можете поместить это в свой xml-файл с описанием вашего EditText :

 android:maxLines="1"
  

Комментарии:

1. И если фокус не приходит, вы можете попробовать .dispatchTouchEvent для EditText, возможно, это может имитировать щелчок по EditText, но requestFous должен сработать…

2. Я попытался добавить оба, и это не позволяет edittext увеличиваться, что замечательно, однако он по-прежнему добавляет символ новой строки, из-за чего IP-адрес становится недействительным. Если я удалю заданное максимальное количество строк, edittext все равно увеличится и добавит символ новой строки.

3. Похоже, что это может быть просто телефон, который я использую для тестирования. Поскольку эмулятор Android меняет кнопку с возврата на готово, однако, когда я тестирую ее на HTC Incredible, этого не происходит.

4. Если вы используете INPUTTYPE для Phone, он не допускает символы новой строки и допускает ‘.’ в IP-адресе

5. Вам нужно использовать и inputtype, отличный от того, который содержит «многострочный», чтобы описать тип данных, который я думаю. ИЛИ вы можете заменить maxLines на singleLine, хотя я думаю, что это устарело