键盘无法按预期使用输入类型编号

时间:2017-11-09 07:39:54

标签: android android-fragments android-edittext android-inputtype

我已经实现了一个注册活动,其中包含一个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;
}

2 个答案:

答案 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 );