我已经实现了一个注册活动,其中包含一个viewpager中的片段。在其中一个片段中,我有一个表格,其中有一些EditText以dinamically方式创建。 问题是,如果我将输入类型编号或电话设置为此EditText之一,则键盘将停止输入数字。 如果我将输入类型设置为文本,那么它将按预期工作。
以下是我设置输入类型的代码:
switch(mDatosSocio.getTipo()){
case "text":
etFormField.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_POSTAL_ADDRESS);
break;
case "number":
etFormField.setInputType(InputType.TYPE_CLASS_PHONE);
break;
case "email":
etFormField.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS | InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS);
break;
default:
break;
}
有关于此的任何想法?提前谢谢!
修改 的解决方案
问题是我在父活动中有这个功能,所以它阻止输入数字。
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
if (event.getAction()==KeyEvent.ACTION_DOWN) {
Log.d("KEYDOWN", event.getKeyCode()+"");
}
else if (event.getAction()==KeyEvent.ACTION_UP) {
Log.d("KEYUP", event.getKeyCode()+"");
}
Log.d("KEY", event.getKeyCode()+"");
return true;
}
答案 0 :(得分:0)
应用其他选项TYPE_NUMBER_FLAG_DECIMAL。
etFormField.setInputType(InputType.TYPE_CLASS_NUMBER|InputType.TYPE_NUMBER_FLAG_DECIMAL)
的编辑:强>
这是我的示例代码,并使用参考键盘应用程序在Galaxy S7中进行了测试。
MainActivity.java
public class MainActivity extends AppCompatActivity {
Button button1;
Button button2;
EditText editText1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button1 = findViewById(R.id.btn_1);
button2 = findViewById(R.id.btn_2);
editText1 = findViewById(R.id.real_edittext);
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
editText1.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_POSTAL_ADDRESS);
}
});
button2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
editText1.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL);
}
});
}
}
activity_main.xml中
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="60dp"
android:orientation="horizontal">
<Button
android:id="@+id/btn_1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="1"/>
<Button
android:id="@+id/btn_2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="2"/>
</LinearLayout>
<EditText
android:id="@+id/real_edittext"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"/>
</LinearLayout>
答案 1 :(得分:0)
像这样添加并检查
EditText etFormField= new EditText(context);
etFormField.setInputType(InputType.TYPE_NUMBER_FLAG_DECIMAL); //for decimal numbers
etFormField.setInputType(InputType.TYPE_NUMBER_FLAG_SIGNED); //for positive or negative values
在你的情况下可能是这样的
etFormField.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL | InputType.TYPE_NUMBER_FLAG_SIGNED);
或者像这样你也可以尝试特定类型的输入类型值
etFormField.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_CLASS_PHONE );