EditText默认使用数字键盘,但允许使用字母字符

我有一个EditText框,并且当它被选为数字键盘时,我想要默认的键盘,因为大部分时间用户都会input数字。 不过,如果需要的话,我也希望允许用户input字母字符。 使用android:inputType="number"只能将input限制为数字。 我有什么select?

这里是你在找什么:

用这种方式在你的xml中定义你的EditText

 <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现在,你可以input数字和字母 ! (数字键盘首先显示)

我会build议一个更强大的解决scheme:

给用户提供selectinputtypes的能力:

需要修复

更好地处理显示/隐藏inputselectbutton

当inputtypes是字母时,可能会删除build议

在这里输入图像描述

这是活动:

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

这里是activity的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> 

不幸的是,这是不可能的,因为只有一个inputType可以被设置为EditText。 以下将只显示button上的字母字符。

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

然而,我可以build议你,将您的inputtypes设置为数字,并只需添加一个小的switchKeyboardbutton在您的窗体接近数字键盘。 并设置其onClick

 editText1.setInputType(InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS); 

以便用户也可以切换到字母字符。

基本上,EditText inputtypes用于设置 EditText中的inputtypes

android:inputtype的可能值是:

  • 文本
  • textCapCharacters
  • textCapWords
  • textCapSentences
  • textAutoCorrect
  • textAutoComplete
  • textMultiLine
  • textImeMultiLine
  • textNoSuggestions
  • textUri
  • textEmailAddress
  • textEmailSubject
  • textShortMessage
  • textLongMessage
  • textPersonName
  • textPostalAddress
  • textPassword
  • textVisiblePassword
  • textWebEditText
  • textFilter
  • textPhonetic
  • numberSigned
  • numberDecimal
  • 电话
  • 约会时间
  • date
  • 时间

那么你可以使用任何值,如在例子中显示:

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

华硕平板电脑具有该function,他们已经定制了默认的键盘。 而键盘仅包含数字和字母。 我认为你的需求解决scheme也是自定义默认键盘

用这种方式在你的xml中定义你的EditText:

 <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”

一排数字和其他字母。

你可以按照帕里什Mayani回答。

在build议中,您可以使用android:inputType="textPhonetic"作为基于用户select的inputType Text和Number。

希望你能明白我的观点。

在活动中的OnCreate做到这一点:

  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会显示数字键盘,但是你可以input任何你想要的。 您也可以根据需要覆盖其他方法。

这是我如何实现它…

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

只有由数字指定的字符将被允许。

请注意,键盘显示的是拨号器的键盘,而不是典型的键盘。 对我来说,它完成了我所需要的全部内容。

在这种情况下,您不应该使用任何inputTypefilter,只需在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"> 

为什么不只是有一个切换button,即:

  • 将inputtypes设置为仅允许数字值
  • 设置inputtypes以允许使用QWERTY键盘
  • 或者设置其他inputtypes(如果需要)

这样,您可以将数字小键盘设置为默认值,然后用户可以通过按下button来更改它。

鉴于各种手机的当前默认Androidinputtypes, 这是不可能的

在某些键盘上有许多可能的黑客行为, 但在其他键盘上却没有这样的黑客行为 ,例如设置原始inputtypes的常见方法,通常包含在答案中:

  • editText.setRawInputType(InputType.TYPE_CLASS_NUMBER)

我能find的最佳build议是在XML中使用textPostalAddressinputtypes:

  • android:inputType="textPostalAddress"

不幸的是,这并没有做我们想要做的事情,但也许将来会这样做。 这样做的唯一好处是编辑框中的元信息将反映你的意图。

通过编程,可以对通常的stream程稍作调整。 首先,您必须将editText设置为:

editText.setInputType(InputType.TYPE_CLASS_NUMBER);

那么你必须听取关键事件。 在按下磅时,再次将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; } } } } 

你可以尝试设置—

 editText.setRawInputType(Configuration.KEYBOARD_QWERTY); 

为更多的描述

在textView的代码中,删除android:inputType中的“text”。

它应该是,

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

你可以通过编程来做到这一点:

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

setInputType(int type)使用为inputType定义的常量设置内容的types。

正如Saurav所说,最好的方法是用一个简单的监听器在QWERTY键盘和数字键盘之间切换:

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

我尝试所有的方法,但不完美。 所以我有另一个想法。 适用于所有键盘。

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

在EditText的xml布局中添加这个参数:

 android:inputType="number|text" 

这将允许用户input文本和数字,并在XML中包含逻辑,而不是在您的活动或片段中有代码。