Запретить ввод ключа на EditText, но по-прежнему отображать текст как многострочный - PullRequest
64 голосов
/ 20 мая 2011

Как мне сделать EditText на Android таким образом, чтобы пользователь не мог вводить многострочный текст, но дисплей по-прежнему многострочный (т.е. вместо переноса текста вправо есть перенос слов?)

Это похоже на встроенное приложение SMS, где мы не можем вводить новую строку, но текст отображается в несколько строк.

Ответы [ 18 ]

1 голос
/ 17 декабря 2018

Вы можете изменить кнопку действия с кода

editText.imeOptions = EditorInfo.IME_ACTION_DONE
editText.setRawInputType(InputType.TYPE_CLASS_TEXT)

Xml

android:inputType="textMultiLine"
1 голос
/ 10 апреля 2014

Принятый ответ работал так хорошо, пока я не скопировал текст с переносами строк в EditText.Поэтому я добавил onTextContextMenuItem для отслеживания действия вставки.

@Override
public boolean onTextContextMenuItem(int id) {
    boolean ret = super.onTextContextMenuItem(id);
    switch (id) {
        case android.R.id.paste:
            onTextPaste();
            break;
    }
    return ret;
}

public void onTextPaste() {
    if (getText() == null)
        return;
    String text = getText().toString();
    text = text.replaceAll(System.getProperty("line.separator"), " ");
    text = text.replaceAll("\\s+", " ");
    setText(text);
}
0 голосов
/ 12 сентября 2018

Вот решение ....

<EditText
   android:id="@+id/editText"
   android:layout_width="match_parent"
   android:layout_height="wrap_content"
   android:maxLength="150"                                 
   android:textSize="15dp"
   android:imeOptions="actionDone"
   android:inputType="text|textMultiLine"/>

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

editText.setOnKeyListener(new View.OnKeyListener() {
        @Override
        public boolean onKey(View view, int keyCode, KeyEvent event) {

            if (keyCode==KeyEvent.KEYCODE_ENTER)
            {
                // Just ignore the [Enter] key
                return true;
            }
            // Handle all other keys in the default way
            return (keyCode == KeyEvent.KEYCODE_ENTER);
        }
    });
0 голосов
/ 11 декабря 2012

Добавление этого свойства в EditText XML работает для меня:

android:lines="1"

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

0 голосов
/ 13 июля 2018

Я дам другой вариант, чтобы вам не приходилось создавать подкласс EditText.Создайте InputFilter, который отфильтровывает разрывы строк.Затем используйте EditText.addInputFilter.

Исходный код для такого входного фильтра находится здесь: https://gist.github.com/CapnSpellcheck/7c72830e43927380daf5205100c93977

Вы можете передать 0 в конструкторе, и он не допустит никаких новых строк.Кроме того, вы можете комбинировать это с одним из других настроек, таких как android:imeOptions="actionDone", так как это поможет улучшить работу на некоторых устройствах.

0 голосов
/ 23 августа 2013

Для URI вы можете использовать:

android:inputType="textUri"
android:lines="1"
android:maxLength="128"

В противном случае android:inputType="textPersonName", как упомянуто выше, работает для других EditText, таких как имя пользователя и т. Д.

0 голосов
/ 12 ноября 2013
<EditText 
  android:id="@+id/Msg"
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"              
  android:layout_marginTop="5dip"
  android:lines="5"
  android:selectAllOnFocus="true"               
  android:hint="Skriv meddelande...\n(max 100tkn)"/>


EditText et = (EditText)findViewById(R.id.Msg);
String strTmp = et.getText().toString();
strTmp = strTmp.replaceAll("\\n"," ");
0 голосов
/ 09 июля 2014
    EditText textView = new EditText(activity);
    ...
    textView.setOnEditorActionListener(new TextView.OnEditorActionListener() {
        @Override
        public boolean onEditorAction(TextView textView, int i, KeyEvent keyEvent) {
            if(KeyEvent.KEYCODE_ENTER == keyEvent.getKeyCode()) {
                return false;
            }
            ....... 

        }
    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...