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中使用textPostalAddress
inputtypes:
-
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中包含逻辑,而不是在您的活动或片段中有代码。