按Enter键更改EditText

时间:2016-06-29 15:39:58

标签: android android-edittext

我的问题是我有一个包含2个EditText视图的登录屏幕。当我输入用户名并单击Enter时,它会添加更多行,但我希望它改为EditText密码。有人可以帮助我吗?

 public void onClick(View v){

    final TextView user = (TextView)findViewById(R.id.tnome);
    final TextView pw = (TextView)findViewById(R.id.tpw);
    if (user.getText().toString().equals("") || pw.getText().toString().equals((""))) {
        Toast.makeText(MainActivity.this, "Têm de Preencher todos os Campos", Toast.LENGTH_SHORT).show();
        user.requestFocus();

    }else{
        if (user.getText().toString().endsWith(" ")){
            user.setText(user.getText().toString().substring(0,user.length()-1));
        }
        user.setText(user.getText().toString().toLowerCase());
        if (user.getText().toString().equals("admin") && pw.getText().toString().equals("admin")){

            startActivity(new Intent(MainActivity.this,Home.class));
            user.setText("");
            pw.setText("");
        }
        user.setOnKeyListener(new View.OnKeyListener() {

            public boolean onKey(View v, int keyCode, KeyEvent event) {
                // If the event is a key-down event on the "enter" button
                if ((event.getAction() == KeyEvent.ACTION_DOWN) &&
                        (keyCode == KeyEvent.KEYCODE_ENTER))
                {
                    // Perform action on Enter key press
                    user.clearFocus();
                    pw.requestFocus();
                    return true;
                }
                return false;
            }
        });

        pw.setOnKeyListener(new View.OnKeyListener() {

            public boolean onKey(View v, int keyCode, KeyEvent event) {

                if ((event.getAction() == KeyEvent.ACTION_DOWN) &&
                        (keyCode == KeyEvent.KEYCODE_ENTER))
                {
                    // Perform action on Enter key press
                    // check for username - password correctness here
                    return true;
                }
                return false;
            }
        });
    }
}

1 个答案:

答案 0 :(得分:1)

使用android:inputType="text"(或another value)将输入文字限制为一行。

通常,当输入控件布局在布局文件(resx)中时,按ENTER将使焦点转到下一个字段。您不需要任何自定义处理代码来完成这项工作(即,您不应该在用户名字段上使用代码将ENTER设置焦点设置为密码字段)。

您可以使用<requestFocus />标记在页面加载时强制关注字段。

<EditText
    android:id="@+id/etUserName"
    android:layout_margin="5dp"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:inputType="textCapWords"
    android:focusable="true"
    >
    <requestFocus />
</EditText>


<EditText
    android:id="@+id/etPassword"
    android:layout_margin="5dp"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:inputType="textPassword"
    android:cursorVisible="true"
    android:hint="Password"
    />

监听器的连接不起作用的最可能原因是代码仅在单击按钮时运行(它位于onClick函数中)。在页面初始化期间执行密码(pw)字段的连接 - 而onFinishInflate()是一个好地方。

但是,您可能需要连接一个键监听器,在密码字段中按ENTER键提交数据(或进行验证)。