我正在尝试获取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>
当我尝试运行它时,键盘显示正确的键,但是当我在输入密码后尝试按完后,没有任何反应。我用它来处理按钮按下:
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:我在发布之前已经通过谷歌搜索了一个小时,所以请不要批评不这样做。如果您找到有用的链接,请分享。
答案 0 :(得分:47)
只需将 android:inputType="..."
添加到您的EditText即可。它会工作!! :)
答案 1 :(得分:38)
您应该为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;
}
});
上的教程
答案 2 :(得分:22)
我想补充一点,某些手机厂商可能无法正确实施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;
}
});
还要注意&#34;处理&#34;国旗(倩倩没有解释那部分)。可能是更高级别的其他OnEditorActionListeners正在侦听不同类型的事件。如果您的方法返回false,则表示您没有处理此事件,并且它将被传递给其他人。如果您返回true表示您已处理/使用它,并且不会将其传递给其他人。
答案 3 :(得分:7)
使用android:inputType="Yours"
然后
android:lines="1"
android:imeOptions="actionDone"
答案 4 :(得分:2)
尝试了很多东西后,这对我有用:
android:maxLines="1"
android:inputType="text"
android:imeOptions="actionDone"
答案 5 :(得分:1)
您应该为EditText设置OnEditorActionListener,以实现用户在键盘中单击“完成”时要执行的操作。
答案 6 :(得分:1)
只需添加到钱谦和小便的答案中即可:
这是任何输入事件的动作ID为EditorInfo.IME_ACTION_UNSPECIFIED(0)的原因。
actionId int:动作的标识符。这将是您提供的标识符,如果由于按下Enter键而被调用,则将是EditorInfo#IME_NULL。
(来源: Android documentation)
所以处理输入键事件的正确方法是:
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if (actionId == EditorInfo.IME_NULL) {
// Handle return key here
return true;
}
return false;
}
答案 7 :(得分:0)