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:これを投稿する前にGoogleでしっかりと検索したので、そうしないことを批判しないでください。役立つリンクを見つけたら、共有してください。
Android:inputType="..."
EditTextに。それが動作します!! :)
ユーザーがキーボードの「完了」をクリックしたときに実行するアクションを実装するには、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デベロッパーサイト のチュートリアルを参照してください
Qianqianは正しいです。コードは、EditorActionイベントではなく、ボタンクリックイベントのみをリッスンします。
一部の電話ベンダーは、DONEアクションを適切に実装できない可能性があることを付け加えます。たとえば、これをLenovo A889でテストしましたが、その電話はEditorInfo.IME_ACTION_DONE
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;
}
});
「処理済み」フラグにも注意してください(Qianqianはその部分を説明しませんでした)。上位の他のOnEditorActionListenersが異なるタイプのイベントをリッスンしている可能性があります。メソッドがfalseを返す場合、それはこのイベントを処理しなかったことを意味し、他のユーザーに渡されます。 trueを返した場合、それを処理/消費したことを意味し、他の人に渡されません。
つかいます Android:inputType="Yours"
その後
Android:lines="1"
Android:imeOptions="actionDone"
多くのことを試した後、これは私のために働いたものです:
Android:maxLines="1"
Android:inputType="text"
Android:imeOptions="actionDone"
ユーザーがキーボードの「完了」をクリックしたときに実行するアクションを実装するには、EditTextにOnEditorActionListenerを設定する必要があります。