android - ограничить edittext одной строкой


возможный дубликат: 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 имел только одну строку. Даже если пользователь нажимает «Enter», курсор не должен опускаться во вторую строку. Может ли кто-нибудь помочь мне в этом?



Answers



Использовать 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>



Использование android:singleLine="true" устарело.

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

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



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

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

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

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




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

android:maxLines="1"



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

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

android:singleLine="true" is deprecated

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

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




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

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



В прошлом я делал это с помощью android:singleLine="true" а затем добавлял слушатель для клавиши "enter":

((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;
    }
});



Включить android:singleLine="true"




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

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

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

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

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

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




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

android:inputType="text"

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

android:maxLength="<int>"

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




Чтобы ограничить вас, вам просто нужно установить опцию одиночной строки на «true».

android:singleLine="true"



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

android:ellipsize="end"
android:maxLines="1"



Используйте код ниже, а не код

<EditText 
    android:id="@+id/searchbox"  
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:lines="1"
    android:singleLine="true"
    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..."/>



@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;
    }
});

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




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




Добавьте эту строку в свой текст

Android: inputType = "текст"




Programatically:

textView.setMaxLines(1);



Поскольку android:singleLine="true" теперь амортизируется, поэтому используйте

андроид: MAXLINES = "1"

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




в XML-файле добавьте это свойство в Edit Text

 android:maxLines="1"



android:imeOptions="actionDone"

работал на меня.