#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, хотя я думаю, что это устарело