我有一个EditText框,我希望将默认键盘选为数字小键盘时出现,因为大多数情况下,用户将输入数字。但是,如果需要,我确实希望允许用户输入字母字符。使用android:inputType="number"
将输入限制为仅数字。我有什么选择?
我有一个EditText框,我希望将默认键盘选为数字小键盘时出现,因为大多数情况下,用户将输入数字。但是,如果需要,我确实希望允许用户输入字母字符。使用android:inputType="number"
将输入限制为仅数字。我有什么选择?
Answers:
通过以下方式在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”
一排数字和其余字母。
我建议一个更健壮的解决方案:
向用户展示选择输入类型的能力:
所需的修复
-更好地显示/隐藏输入选择按钮
-输入类型为字母时,可能会删除建议
这是活动:
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>
这是您要寻找的:
通过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
现在时,都可以输入数字和字母!(首先显示数字键盘)
不幸的是,这是不可能的,因为只能为一个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);
这样用户也可以切换到字母字符。
number|text
(参见上文)的键盘时,这意味着您可以通过长按输入字母,实际上是行不通的。在我看来,越野车相当小,或者至少不完整。
TYPE_MASK_CLASS
:确定所给文本整体类别的位掩码。支持的类为:TYPE_CLASS_TEXT,TYPE_CLASS_NUMBER,TYPE_CLASS_PHONE,TYPE_CLASS_DATETIME。IME作者:如果类不是一个你理解,假设没有变化或标志TYPE_CLASS_TEXT。”
基本上,EditText输入类型用于设置EditText中的输入类型。
的可能值为android:inputtype
:
那么您可以使用任何值,如示例所示:
<EditText android:id="@+id/EditText01"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:inputType="number"
android:text="1212223"/>
华硕平板电脑具有该功能,他们自定义了默认键盘。并且键盘仅包含数字和字母。我认为您的需求解决方案也无法自定义默认键盘
您可以按照Paresh Mayani的回答。
在建议中,您可以android:inputType="textPhonetic"
根据用户选择将inputType用作文本和数字。
希望你能理解我的意思。
在活动中的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) {
}
});
在这种情况下,您输入is,number
并且android将显示数字键盘,但是您可以输入任何想要的内容。您也可以根据需要覆盖其他方法。
这是我实现的方式...
android:inputType =“ textPhonetic | numberDecimal” android:digits =“ / 0123456789.abcdefghijklmnopqrstuvwxyz”
仅允许使用数字指定的字符。
请注意,显示的键盘是拨号器的键盘,而不是典型的键盘。对我来说,它完全实现了XML所需的功能。
在这种情况下,您不应使用任何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">
给定当前各种手机的默认Android输入类型,这是不可能的。
有许多可能的技巧可以在某些键盘上起作用,但不适用于其他键盘,例如答案中通常包含的设置原始输入类型的常用方法:
editText.setRawInputType(InputType.TYPE_CLASS_NUMBER)
我能找到的最佳建议是textPostalAddress
在XML中使用输入类型:
android:inputType="textPostalAddress"
不幸的是,这并不做我们想做的事情还没有,但也许它会在未来。这样做的唯一好处是,编辑框上的元信息将反映您的意图。
通过编程,可以对常规流程进行一些调整。首先,您必须将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;
}
}
}
}
在textView的代码中,删除android:inputType中的“文本”。
它应该是,
<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定义的常量设置内容的类型。
正如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"
这将允许用户输入文本和数字,并在xml中包含逻辑,而不是在活动或片段中包含代码。