EditText с цифровой клавиатурой по умолчанию, но допускает буквенные символы - PullRequest
79 голосов
/ 23 августа 2010

У меня есть поле EditText, и я хочу, чтобы клавиатура по умолчанию появлялась, когда она была выбрана, как цифровая клавиатура, поскольку большую часть времени пользователи будут вводить цифры. Тем не менее, я хочу разрешить пользователям также вводить буквенные символы, если это необходимо. Использование android:inputType="number" ограничивает ввод только цифрами. Какие варианты у меня есть?

Ответы [ 19 ]

13 голосов
/ 02 сентября 2016

Определите ваш EditText в xml следующим образом:

<EditText 
    android:id="@+id/txtOppCodigoCliente"
    android:inputType="textVisiblePassword"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:maxLength="11"
    android:hint="@string/strCodigoCliente"/>

Выход: Android: inputType = "textVisiblePassword"

Ряд цифр и остальные буквы.

11 голосов
/ 29 января 2013

Я бы предложил более надежное решение:

Предоставьте пользователю возможность выбрать тип ввода:

НЕОБХОДИМЫЕ ИСПРАВЛЕНИЯ

- улучшенная обработка отображения / скрытия кнопок выбора входа

- , вероятно, удаляет предложения, когда тип ввода - буква

enter image description here

Вот действие:

package mobi.sherif.numberstexttextview;

import android.os.Bundle;
import android.app.Activity;
import android.text.InputType;
import android.view.View;
import android.view.View.OnFocusChangeListener;
import android.widget.EditText;

public class MainActivity extends Activity {

    EditText mEdit;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mEdit = (EditText) findViewById(R.id.input);
        mEdit.setOnFocusChangeListener(new OnFocusChangeListener() {

            @Override
            public void onFocusChange(View view, boolean focused) {
                findViewById(R.id.llmenu).setVisibility(focused?View.VISIBLE:View.GONE);
            }
        });
    }

    public void onNumbers(View v) {
        mEdit.setInputType(InputType.TYPE_CLASS_NUMBER);
    }

    public void onLetters(View v) {
        mEdit.setInputType(InputType.TYPE_CLASS_TEXT);
    }

}

Вот xml действия: activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <ScrollView
        android:id="@+id/scrollview"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_alignWithParentIfMissing="true"
        android:layout_above="@+id/llmenu" >

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content" >

            <EditText
                android:id="@+id/input"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:inputType="number" >

                <requestFocus />
            </EditText>
        </LinearLayout>
    </ScrollView>

    <LinearLayout
        android:id="@+id/llmenu"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:background="#000000"
        android:padding="0dp" >

        <Button
            android:id="@+id/buttonnumbers"
            android:layout_width="0dp"
            android:onClick="onNumbers"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:text="Numbers" />

        <Button
            android:id="@+id/buttonletters"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:onClick="onLetters"
            android:text="Letters" />
    </LinearLayout>

</RelativeLayout>
10 голосов
/ 29 января 2013

Вот то, что вы ищете:

Определите ваш EditText в вашем XML-коде следующим образом:

<EditText
    android:id="@+id/etTest"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:ems="10"
    android:hint="@string/hint">

</EditText>

И позвоните в ваш onCreate():

etTest = (EditText) findViewById(R.id.etTest);
etTest.setRawInputType(InputType.TYPE_CLASS_NUMBER);
// Note the "Raw"

Каждый раз, когда вы нажимаете на EditText сейчас, вы можете ввести цифр И букв !(Цифровая клавиатура отображается первой)

8 голосов
/ 23 января 2013

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

<EditText
        android:id="@+id/editText1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:inputType="text|number" />

Однако я могу предложить вам следующее: установите тип ввода на числовой и просто добавьте небольшую кнопку switchKeyboard в форму рядом с цифровой клавиатурой.И установите его onClick

editText1.setInputType(InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS);

, чтобы пользователи также могли переключаться на буквенные символы.

6 голосов
/ 23 августа 2010

Обычно тип ввода EditText используется для установки типа ввода в вашем EditText.

Возможные значения для android:inputtype:

  • текст
  • textCapCharacters
  • textCapWords
  • textCapSentences
  • textAutoCorrect
  • textAutoComplete
  • textMultiLine
  • textImeMultiLine
  • textNoSuggestions
  • textUri
  • textEmailAddress
  • textEmailSubject
  • textShortMessage
  • textLongMessage
  • textPersonName
  • textPostalAddress
  • textPassword
  • textVisiblePassword
  • textWebEditText
  • TextFilter
  • textPhonetic
  • номер * * тысяча пятьдесят-один
  • numberSigned
  • numberDecimal
  • телефон
  • Дата и время
  • дата
  • время

тогда вы можете использовать любое значение, как показано в примере:

<EditText android:id="@+id/EditText01"
 android:layout_height="wrap_content"
 android:layout_width="fill_parent"
 android:inputType="number"
 android:text="1212223"/>
4 голосов
/ 29 января 2013

Планшет Asus имеет эту функцию, они настроили клавиатуру по умолчанию.И клавиатура содержит только цифры и алфавиты.Я думаю, что ваше требование решения слишком для настройки клавиатуры по умолчанию

2 голосов
/ 29 января 2013

В OnCreate в Activity сделайте следующее:

    t = (EditText) findViewById(R.id.test);
    t.setKeyListener(new KeyListener() {

        @Override
        public boolean onKeyUp(View view, Editable text, int keyCode, KeyEvent event) {
            return false;
        }

        @Override
        public boolean onKeyOther(View view, Editable text, KeyEvent event) {
            return false;
        }

        @Override
        public boolean onKeyDown(View view, Editable text, int keyCode, KeyEvent event) {
            if (keyCode == 67) { // Handle backspace button =)
                if (text.length() > 0) {
                    t.setText(text.subSequence(0, text.length() - 1));
                    t.setSelection(text.length()-1);
                }
            }
            return false;
        }

        @Override
        public int getInputType() {
            return InputType.TYPE_CLASS_NUMBER;
        }

        @Override
        public void clearMetaKeyState(View view, Editable content, int states) {

        }
    });

В этом случае вы наберете number, и Android покажет цифровую клавиатуру, но вы можете ввести все, что захотите.Также вы можете переопределить другие методы по своему желанию.

2 голосов
/ 27 октября 2013

Вот как я этого достиг ...

android: inputType = "textPhonetic | numberDecimal" android: digits = "/ 0123456789.abcdefghijklmnopqrstuvwxyz"

Только символы, указанные цифрами, будутпозволил.

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

2 голосов
/ 25 мая 2015

Вы не должны использовать никакой фильтр inputType в этом случае, просто добавьте нижнюю строку в свойстве EditText

android:digits="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890 "

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

<EditText
 android:id="@+id/etTest"
 android:layout_width="match_parent"
 android:layout_height="wrap_content"
 android:ems="10"
 android:digits="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890 "
 android:hint="@string/hint">

2 голосов
/ 24 января 2013

Вы можете следить за ответом Пареш Майани.

И совет вы можете использовать android:inputType="textPhonetic" для inputType Text и Number на основе выбора пользователя.

Надеюсь, вы меня поняли.

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