我试图获得一个Android应用程序的登录屏幕,到目前为止,这是我的代码:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<LinearLayout
android:id="@+id/linearLayout1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:orientation="vertical">
<EditText
android:id="@+id/username"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Username"
android:inputType="text"
android:singleLine="true"
android:imeOptions="actionNext">
<requestFocus />
</EditText>
<EditText
android:id="@+id/password"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Password"
android:inputType="textPassword"
android:singleLine="true"
android:imeOptions="actionDone" />
<Button
android:id="@+id/buttonLaunchTriage"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:text="@string/login" />
</LinearLayout>
</RelativeLayout>
当我尝试运行它时,键盘显示正确的键,但当我在输入密码后尝试按done时,什么也没发生。我正在使用此来处理按钮按下:
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();
}
}
});
}
我知道这是一个很大的代码,但如果有人能在这里帮助我,这将是伟大的。这是一个学校的项目。
附言:我在发布这篇文章之前已经在谷歌上搜索了整整一个小时,所以请不要批评我没有这样做。如果你找到了一个有用的链接,请分享。
9条答案
按热度按时间qfe3c7zg1#
只需将**
android:inputType="..."
**添加到您的EditText。它将工作!!:)c6ubokkw2#
您应该为EditText设置OnEditorActionListener,以实现用户单击键盘中的“完成”时要执行的操作。
因此,您需要编写一些代码,如:
请参阅android developer site上的教程
sulc1iza3#
倩倩说得对。您的代码只侦听按钮单击事件,而不侦听EditorAction事件。
我想补充的是,一些手机供应商可能没有正确实现DONE操作。例如,我用联想A889测试过这一点,当你按下DONE时,那款手机从不发送X1 M0 N1 X,它总是发送X1 M1 N1 X,所以我实际上最终得到了类似于
还要注意“handled”标志(倩倩没有解释这部分)。它可能是其他更高级别的OnEditorActionListener正在监听不同类型的事件。如果您的方法返回false,则意味着您没有处理此事件,它将传递给其他人。如果您返回true,则意味着您处理/使用了此事件,它将不会传递给其他人。
ff29svar4#
那么使用
android:inputType="Yours"
vql8enpb5#
在尝试了很多方法之后,这是对我有效的方法:
6ioyuze26#
只需将以下内容添加到属性中:
文件:here
dgsult0t7#
您应该为EditText设置OnEditorActionListener,以实现用户单击键盘中的“完成”时要执行的操作。
ogsagwnx8#
再补充一下倩倩和皮迪的回答:
以下是为什么任何enter事件的操作id都是EditorInfo.IME_ACTION_UNSPECIFIED(0)的原因。
操作ID整数:操作的标识符。这将是您提供的标识符,或者是EditorInfo#IME_NULL(如果由于按下Enter键而被调用)。
(* 来源:* Android documentation)
因此,处理Enter键事件的正确方法是:
eqoofvh99#
在XML中
因哈维