ограничить текст редактирования одной строкой


313

возможный дубликат: android-singleline-true-not-working-for-edittext

<EditText 
    android:id="@+id/searchbox"  
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:lines="1"
    android:scrollHorizontally="true"
    android:ellipsize="end"
    android:layout_weight="1"
    android:layout_marginTop="2dp"
    android:drawablePadding="10dp"
    android:background="@drawable/edittext"
    android:drawableLeft="@drawable/folder_full"
    android:drawableRight="@drawable/search"
    android:paddingLeft="15dp"
    android:hint="search...">
</EditText>

Я хочу, чтобы выше EditTextбыло только одна строка. Даже если пользователь нажимает «ввод», курсор не должен опускаться до второй строки. Кто-нибудь может помочь мне сделать это?


60
использованиеandroid:singleLine=true
Praveenkumar

6
заменить Android: линии = "1" с android:singleLine=true.
Мохаммед Ажаруддин Шейх

3
true должно быть в кавычках "true"
deepwinter

8
Поскольку singleLine устарела, вы можете использовать maxLines = 1 и inputType = text.
sunlover3

4
Использование android:inputType="textVisiblePassword"решит проблему
Саад Махмуд

Ответы:


557

Используйте android:maxLines="1"иandroid:inputType="text"

Вы забыли атрибут android: maxLines . И обратитесь к Android: inputType В вашем примере ниже даст этот результат:

<EditText 
    android:id="@+id/searchbox"  
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:maxLines="1"
    android:inputType="text"
    android:scrollHorizontally="true"
    android:ellipsize="end"
    android:layout_weight="1"
    android:layout_marginTop="2dp"
    android:drawablePadding="10dp"
    android:background="@drawable/edittext"
    android:drawableLeft="@drawable/folder_full"
    android:drawableRight="@drawable/search"
    android:paddingLeft="15dp"
    android:hint="search...">
</EditText>

17
@ Lukasz'Severiaan'Grela в текущей Eclipse IDE, подсказка об устаревании не отображается, android: maxLines не ограничивает ввод одной строкой
mjn

10
use singleline = true
Дакеш Хатри,

2
@Praveen: Можете ли вы дать ссылку, где говорится, что Android: SingleLine устарела? Я не вижу его там для API 23. Я не вижу его упомянутым в документации, а также я не получаю никаких предупреждений, когда использую его с 23.0.1SDK
Shobhit Puri

5
Устаревший с уровня API 3. См .: developer.android.com/reference/android/R.attr.html#singleLine
Луис,

3
Если вы используете только android: maxLines = "1" не будет работать. Так что вам нужно использовать оба android: inputType = "text" и maxlines -1. Тогда это будет работать отлично
Hanuman

194

С помощью android:singleLine="true" не рекомендуется.

Просто добавьте ваш тип ввода и установите maxline на 1, и все будет работать нормально

android:inputType="text"
android:maxLines="1"

80
Если вы не укажете inputType, он не будет работать - вот что я выяснил.
Микро

10
твое право. inputType = "textMultiLine" будет по-прежнему давать вам многострочный текст, даже если вы установите макс. строку в 1.
ralphgabb

2
Обратите внимание, что для android:inputType="number"уже есть максимум 1 строка.
Майкер

Это не работает, если мое текстовое представление очень длинное, и я хочу, чтобы оно было многострочным, но не с символами новой строки.
Хтафоя

@htafoya этот фрагмент кода работает для редактирования текста одной строкой. Однако вы можете начать новый вопрос здесь, на SO.
ralphgabb

54

android:singleLineсейчас устарела. Из документации :

Эта константа устарела на уровне API 3.

Этот атрибут устарел. maxLinesВместо этого используйте для изменения макета статического текста и textMultiLineвместо этого используйте флаг в атрибуте inputType для редактируемых текстовых представлений (если указаны как singleLine, так и inputType, флаги inputType будут переопределять значение singleLine).

Таким образом, вы можете просто установить android:inputType="textEmailSubject"или любое другое значение, соответствующее содержимому поля.


29
Если вы хотите простое текстовое поле, используйте android:inputType="text".
PhoneixS

Спасибо @Mr. Bungle, у меня работает textMultiLine!
user1510006

18

Вы должны добавить эту строку в ваш EditText в XML:

android:maxLines="1"

3
Как отмечали другие ответы - это было maxLinesinputType
признано

16
android:maxLines="1"
android:inputType="text"

Добавьте приведенный выше код, чтобы иметь одну строку в теге EditText в макете.

android:singleLine="true" is deprecated

Эта константа устарела на уровне API 3 .

Этот атрибут устарел. Вместо этого используйте maxLines, чтобы изменить макет статического текста, и используйте вместо этого флаг textMultiLine в атрибуте inputType для редактируемых текстовых представлений (если указаны как singleLine, так и inputType, флаги inputType будут переопределять значение singleLine).


13

Теперь android:singleLineатрибут устарел. Пожалуйста, добавьте эти атрибуты к EditTextсебе, EditTextчтобы они были в одну строку.

android:inputType="text"
android:imeOptions="actionNext"
android:maxLines="1"

11

Я делал это в прошлом, android:singleLine="true"а затем добавил слушателя для клавиши «ввод»:

((EditText)this.findViewById(R.id.mytext)).setOnKeyListener(new OnKeyListener() {

    public boolean onKey(View v, int keyCode, KeyEvent event) {

        if (event.getAction() == KeyEvent.ACTION_DOWN && keyCode == KeyEvent.KEYCODE_ENTER) {
            //if the enter key was pressed, then hide the keyboard and do whatever needs doing.
            InputMethodManager imm = (InputMethodManager)context.getSystemService(Context.INPUT_METHOD_SERVICE);
            imm.hideSoftInputFromWindow(getApplicationWindowToken(), 0);

            //do what you need on your enter key press here

            return true;
        }

        return false;
    }
});

11

Это будет работать для EditText:

android:inputType="text"

Тогда я бы установил максимальную длину для входного текста:

android:maxLines="1"

Это те 2, которые нужны сейчас.



5

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

EditText editText = new EditText(this);
editText.setInputType(InputType.TYPE_CLASS_TEXT);

Это позволяет использовать AZ, az, 0-9 и специальные символы, но не позволяет вводить нажатие. Когда вы нажимаете ввод, он переходит к следующему компоненту графического интерфейса, если это применимо в вашем приложении.

Вы также можете установить максимальное количество символов, которое может быть помещено в этот EditText, или же он вытолкнет все, что справа от него, за пределы экрана, или просто начнет отставать от самого экрана. Вы можете сделать это так:

InputFilter[] filters = new InputFilter[1];
filters[0] = new InputFilter.LengthFilter(8);
editText.setFilters(filters);

Это устанавливает максимальное количество символов до 8 в этом EditText. Надеюсь, все это поможет вам.





1

@Aleks G OnKeyListener () работает очень хорошо, но я запустил его из MainActivity и поэтому пришлось немного его изменить:

EditText searchBox = (EditText) findViewById(R.id.searchbox);
searchBox.setOnKeyListener(new OnKeyListener() {

    public boolean onKey(View v, int keyCode, KeyEvent event) {

        if (event.getAction() == KeyEvent.ACTION_DOWN && keyCode == KeyEvent.KEYCODE_ENTER) {
            //if the enter key was pressed, then hide the keyboard and do whatever needs doing.
            InputMethodManager imm = (InputMethodManager) MainActivity.this.getSystemService(Context.INPUT_METHOD_SERVICE);
            imm.hideSoftInputFromWindow(searchBox.getApplicationWindowToken(), 0);

            //do what you need on your enter key press here

            return true;
        }

        return false;
    }
});

Я надеюсь, что это помогает любому, кто пытается сделать то же самое.



1

Также важно обратить внимание, если свойство android: inputType имеет значение textMultiLine . Если это так, свойства android: singleLine, android: imeOptions, android: ellipsize и android maxLines будут игнорироваться, и ваш EditText в любом случае будет принимать MultiLines.



1

Как android:singleLine="true"сейчас не рекомендуется, так использовать

Android: MAXLINES = "1"

Вместо этого используйте maxLines, чтобы изменить макет статического текста, и используйте вместо этого флаг textMultiLine в атрибуте inputType для редактируемых текстовых представлений (если указаны как singleLine, так и inputType, флаги inputType будут переопределять значение singleLine).



1

Используйте код ниже вместо вашего кода

<EditText 
    android:id="@+id/searchbox"  
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:maxLines="1"
    android:inputType="text"
    android:scrollHorizontally="true"
    android:ellipsize="end"
    android:layout_weight="1"
    android:layout_marginTop="2dp"
    android:drawablePadding="10dp"
    android:background="@drawable/edittext"
    android:drawableLeft="@drawable/folder_full"
    android:drawableRight="@drawable/search"
    android:paddingLeft="15dp"
    android:hint="search..."/>

0

в XML-файл добавить эти свойства в Редактировать текст

 android:maxLines="1"

0

Вы должны добавить эту строку в ваш EditText

android:maxLines="1"

и еще одна вещь, не забудьте установить android:inputType(все, что вы хотите, текст, телефон .., но вы должны установить его)


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.