InputType=phone 不显示文本和 returns 一个空字符串

InputType=phone does not show the text and returns an empty string

我正在尝试获取 phone 数字,但 EditText 未显示数字,字符串 t 为空。如果我开始输入 + 号后跟一些数值,我只会在 edit.gettext().toString().

中得到 +

如果我设置 inputtype="text" 一切正常。

是bug还是什么?

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.narb.test.MainActivity">

        <TextView
            android:id="@+id/txt"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerHorizontal="true"
            android:text="Text typed"
            />

        <EditText
            android:id="@+id/edit"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@id/txt"
            android:layout_centerHorizontal="true"
            android:layout_marginTop="30dp"
            android:hint="Enter text"
            android:inputType="phone"
            />
</RelativeLayout>

这是我的代码:

public class MainActivity extends AppCompatActivity {
    TextView txt;
    EditText edit;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        edit = (EditText) findViewById(R.id.edit);

        txt = (TextView) findViewById(R.id.txt);

        edit.setOnKeyListener(new View.OnKeyListener() {
            public boolean onKey(View v, int keyCode, KeyEvent event) {
                if ((event.getAction() == KeyEvent.ACTION_DOWN) &&
                        (keyCode == KeyEvent.KEYCODE_ENTER)) {

                    String t = edit.getText().toString();
                    txt.setText(t);
                }
                return true;
            }
        });

    }
}

我想你应该试试这个

android:inputType="number"

As Input type "number"是键盘允许切换字符,也可以输入其他特殊字符。

尝试以下对我有用的方法。

如果您正在处理输入,您应该只 return 来自 onKey 的 true。即,将 return true 移到 if 块内,将 return false 移到其他地方

 edit.setOnKeyListener(new View.OnKeyListener() {
        public boolean onKey(View v, int keyCode, KeyEvent event) {
            if ((event.getAction() == KeyEvent.ACTION_DOWN) &&
                    (keyCode == KeyEvent.KEYCODE_ENTER)) {

                String t = edit.getText().toString();
                txt.setText(t);
                return true;
            }
            return false;
        }
    });

If block会returntrue最后写false。

 @Override
            protected void onCreate(@Nullable Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_searchview);
                edit = (EditText) findViewById(R.id.edit);
                txt = (TextView) findViewById(R.id.txt);
                edit.setOnKeyListener(new View.OnKeyListener() {
                    public boolean onKey(View v, int keyCode, KeyEvent event) {
                        if ((event.getAction() == KeyEvent.ACTION_DOWN) &&
                                (keyCode == KeyEvent.KEYCODE_ENTER)) {
                            String t = edit.getText().toString();
                            txt.setText(t);
                            return true;
                        }
                        return false;
                    }
                });
            }