Android imeOptions =“actionDone”无效

我正在尝试获取Android应用程序的登录屏幕,到目前为止这是我的代码:

      

当我尝试运行它时,键盘显示正确的键,但是当我在输入密码后尝试按完后,没有任何反应。 我用它来处理按钮按下:

 private void setupLoginButton() { Button launchButton = (Button) findViewById(R.id.buttonLaunchTriage); launchButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { EditText username = (EditText) findViewById(R.id.patient_start_userName_value); EditText password = (EditText) findViewById(R.id.patient_start_password_value); try { if(TriageApplicationMain.validateUser(username.getText().toString(),password.getText().toString(),getApplicationContext())) { Toast.makeText(StartActivity.this, "Launching Triage Application", Toast.LENGTH_SHORT) .show(); startActivity(new Intent(StartActivity.this, MainActivity.class)); } else { AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder( StartActivity.this); // set dialog message alertDialogBuilder .setMessage("Incorrect Credentials") .setCancelable(false) .setPositiveButton("OK",new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog,int id) { // if this button is clicked, close // current activity dialog.cancel(); } }); // create alert dialog AlertDialog alertDialog = alertDialogBuilder.create(); // show it alertDialog.show(); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }); } 

我知道这是很多代码,但如果有人能在这里帮助我,那就太好了。 这是一个学校项目。

PS:我在发布之前已经通过谷歌搜索了一个小时,所以请不要批评不这样做。 如果您find有用的链接,请分享。

    您应该为EditText设置OnEditorActionListener,以实现当用户单击键盘中的“完成”时要执行的操作。

    因此,您需要编写一些代码,如:

     password.setOnEditorActionListener(new OnEditorActionListener() { @Override public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { if (actionId == EditorInfo.IME_ACTION_DONE) { // Do whatever you want here return true; } return false; } }); 

    请参阅android开发者网站上的教程

    只需将android:inputType="..."到EditText即可。 它会工作!! 🙂

    倩倩是对的。 您的代码仅侦听按钮单击事件,而不是侦听EditorAction事件。

    我想补充一点,一些手机厂商可能无法正确实施DONE动作。 我已经用联想A889对此进行了测试,当你按下完成时,手机永远不会发送EditorInfo.IME_ACTION_DONE ,它总是会发送EditorInfo.IME_ACTION_UNSPECIFIED所以我实际上最终得到类似的东西

     myEditText.setOnEditorActionListener(new EditText.OnEditorActionListener() { @Override public boolean onEditorAction(final TextView v, final int actionId, final KeyEvent event) { boolean handled=false; // Some phones disregard the IME setting option in the xml, instead // they send IME_ACTION_UNSPECIFIED so we need to catch that if(EditorInfo.IME_ACTION_DONE==actionId || EditorInfo.IME_ACTION_UNSPECIFIED==actionId) { // do things here handled=true; } return handled; } }); 

    还要注意“处理”标志(倩倩没有解释那部分)。 可能是更高级别的其他OnEditorActionListeners正在侦听不同types的事件。 如果您的方法返回false,则表示您没有处理此事件,并且它将被传递给其他人。 如果您返回true表示您已处理/使用它,则不会将其传递给其他人。

    使用android:inputType="Yours"然后

     android:lines="1" android:imeOptions="actionDone" 

    您应该为EditText设置OnEditorActionListener,以实现当用户单击键盘中的“完成”时要执行的操作。

    在尝试了很多东西之后,这对我有用:

      android:maxLines="1" android:inputType="text" android:imeOptions="actionDone" 

    只需将其添加到您的属性:

     android:inputType="textPassword" 

    医生: 这里