EditText с цифровой клавиатурой по умолчанию, но с буквенными символами

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

Ответ 1

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

Определите свой 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, вы можете ввести цифры и буквы! (Сначала отображается цифровая клавиатура)

Ответ 2

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

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

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

-better обработка показа/скрытия кнопок выбора входа

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

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>

Ответ 3

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

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

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

editText1.setInputType(InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS);

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

Ответ 4

В принципе, inputType 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"/>

Ответ 5

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

Ответ 6

Определите свой 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"

Строка чисел и остальные буквы.

Ответ 7

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

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

Надеюсь, вы получите мою мысль.

Ответ 8

В OnCreate in 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 отобразит цифровую клавиатуру, но вы можете ввести все, что хотите. Также вы можете переопределить другие методы, как вы пожелаете.

Ответ 9

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

Android: inputType = "textPhonetic | numberDecimal" андроид: цифры = "/0123456789.abcdefghijklmnopqrstuvwxyz"

Разрешены только символы, указанные цифрами.

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

Ответ 10

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

android:digits="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890 "

Теперь только этим символам будет разрешено вводить в EditText. Полный код вашего 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">

Ответ 11

Почему бы просто не включить кнопку переключения:

  • Устанавливает тип ввода, чтобы разрешить только числовые значения
  • Устанавливает тип ввода, позволяющий использовать клавиатуру QWERTY.
  • Или установите другие типы ввода (если необходимо)

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

Ответ 12

Программно можно с небольшим изменением обычного потока. Сначала вы должны установить editText как:

editText.setInputType(InputType.TYPE_CLASS_NUMBER);

Затем вам нужно прослушать keyevent. При нажатии фунта снова установите InputType на InputType.TYPE_CLASS_TEXT. Это должно работать, поскольку оно работает для меня.

editText.setOnKeyListener(new View.OnKeyListener() 
{
     @Override
     public boolean onKey(View v, int keyCode, KeyEvent event) {
     // TODO Auto-generated method stub
     Log.d("KeyBoard", "Keyboard Test Key Hit");

        switch (keyCode) 
        {
              KeyEvent.KEYCODE_POUND:

              if(editText.setInputType(InputType.TYPE_CLASS_TEXT);
              {                             
                   editText.setInputType(InputType.TYPE_CLASS_TEXT);
                   return true;
              }
         }
     }
}  

Ответ 13

Это невозможно, учитывая текущие типы ввода Android по умолчанию для разных телефонов.

Существует много возможных хаков, которые работают на некоторых клавиатурах, но не на других, например, общий метод установки типа исходного ввода, который обычно включается в ответы:

  • editText.setRawInputType(InputType.TYPE_CLASS_NUMBER)

Лучший совет, который я смог найти, - использовать тип ввода textPostalAddress в вашем XML:

  • android:inputType="textPostalAddress"

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

Ответ 14

Вы можете попробовать установить ---

editText.setRawInputType(Configuration.KEYBOARD_QWERTY);

для подробнее

Ответ 15

В вашем коде для textView удалите "текст" в android: inputType.

Должно быть,

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

Ответ 16

Вы можете сделать это программно:

// Numbers
mEditText.setInputType(InputType.TYPE_CLASS_NUMBER);

// Text
mEditText.setInputType(InputType.TYPE_CLASS_TEXT);

setInputType (тип int) Задайте тип содержимого с константой как определяемый для типа ввода.

Ответ 17

Как говорит Саурав, лучший способ меняется между QWERTY Keyboard и Numeric Keyborad простым слушателем:

input.setInputType(InputType.TYPE_CLASS_TEXT);

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

        switch (keyCode) {
        case 24: // Volumen UP

             input.setInputType(InputType.TYPE_CLASS_NUMBER);
             break;
         case 25: // Volumen DOWN

             input.setInputType(InputType.TYPE_CLASS_TEXT);
             break;
        }
        return true;
    }
});

Ответ 18

Я пробую весь метод, но не совершенен. Поэтому у меня есть другая идея. Работа идеально подходит для всей клавиатуры.

 @Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_reset_password);
    editText.setRawInputType(InputType.TYPE_CLASS_NUMBER);
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);


    // Checks whether a hardware keyboard is available
    if (newConfig.hardKeyboardHidden == Configuration.HARDKEYBOARDHIDDEN_NO) {
        Toast.makeText(this, "keyboard visible", Toast.LENGTH_SHORT).show();
        if (editText.isFocused()) {
            editText.setInputType(InputType.TYPE_CLASS_TEXT);
        }

    } else if (newConfig.hardKeyboardHidden == Configuration.HARDKEYBOARDHIDDEN_YES) {
        Toast.makeText(this, "keyboard hidden", Toast.LENGTH_SHORT).show();
        if (editText.getInputType() == InputType.TYPE_CLASS_TEXT) {
            editText.setInputType(InputType.TYPE_CLASS_NUMBER);
        }
    }
}

Ответ 19

В вашем макете xml для EditText добавьте этот параметр:

android:inputType="number|text"

Это позволит пользователю вводить как текст, так и номер и содержит логику в xml, а не код в вашей деятельности или фрагменте.