Edittextでは、「Enter」キーを入力した後、システムはその中に新しい行を作成します。新しい行ではなく、次のedittextに焦点を当てたいと思います。コーディング方法は?私のxmlのコードは以下です
<EditText
Android:id="@+id/txtNPCode"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:textSize="18sp"
Android:layout_alignLeft="@+id/lblNPCode"
Android:layout_below="@+id/lblNPCode"
Android:layout_centerHorizontal="true"/>
<EditText
Android:id="@+id/txtCNPCode"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:textSize="18sp"
Android:layout_alignLeft="@+id/lblCNPCode"
Android:layout_below="@+id/lblCNPCode"
Android:layout_centerHorizontal="true"/>
また、setOnKeyListenerのキーコードをキャプチャします
tCNPCode.setOnKeyListener(new OnKeyListener() {
public boolean onKey(View v, int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
if(keyCode == 66) {
Toast.makeText(S_PCode.this, "Enter Key", Toast.LENGTH_LONG).show();
//tNPCode.setFocusable(true);
}
return false;
}
});
requestFocus
メソッドを使用する必要があります。あなたの場合、それは次のようなものになります:
tCNPCode.setOnKeyListener(new OnKeyListener() {
public boolean onKey(View v, int keyCode, KeyEvent event) {
if(keyCode == 66) {
txtCNPCode.requestFocus();
}
return false;
}
});
OnKeyListener
を使用する必要さえありません。行Android:singleLine="true"
をEditText
に追加するだけです。この操作の後、EditText
は希望どおりに動作します。したがって、あなたの特定のケースでは:
<EditText
Android:id="@+id/txtNPCode"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:textSize="18sp"
Android:layout_alignLeft="@+id/lblNPCode"
Android:layout_below="@+id/lblNPCode"
Android:layout_centerHorizontal="true"
Android:singleLine="true"
/>
<EditText
Android:id="@+id/txtCNPCode"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:textSize="18sp"
Android:layout_alignLeft="@+id/lblCNPCode"
Android:layout_below="@+id/lblCNPCode"
Android:layout_centerHorizontal="true"
/>
問題を解決します。
最善の方法は、inputTypeのオプションの1つを使用することです。例:Android:inputType="textPersonName"
これにより、必要な効果が得られます。他のオプションもチェックしてください。将来的には時間の節約になります:)
Android:singleLine = "true"は廃止されているため、使用しないでください。ドキュメントはそれについて言っています:
この属性は廃止され、inputType属性のtextMultiLineフラグに置き換えられました。既存のレイアウトを変更するときは注意してください。singeLineのデフォルト値はfalse(複数行モード)ですが、inputTypeに値を指定すると、デフォルトは単一行モードになります。 (singleLine属性とinputType属性の両方が見つかった場合、inputTypeフラグはsingleLineの値をオーバーライドします。).
ここでIMEオプションを検討してください http://androidcookbook.com/Recipe.seam;jsessionid=C824437B48F346E23FBE5828969029B4?recipeId=422 とドキュメントはこちら http://developer.Android.com/ reference/Android/widget/TextView.html#attr_Android:imeOptions 。
必要なのは、各EditTextに属性Android:imeOptions = "actionNext"を追加することだけです。キーボードが表示され、以前はEnterキーがあった次のキーが表示され、次のEditTextに移動できます。
ただし、「actionNext」の順序は上から下です。たとえば、水平レイアウトの場合:
<LinearLayout Android:orientation="horizontal" >
<EditText Android:id="@+id/et1" Android:imeOptions="actionNext" />
<EditText Android:id="@+id/et2" Android:imeOptions="actionNext" />
</LinearLayout>
et2は決してフォーカスされません。コードで修正する必要があります。
et1.setOnEditorActionListener(new OnEditorActionListener()
{
@Override
public boolean onEditorAction(TextView v, int actionId,
KeyEvent event)
{
switch (actionId)
{
case EditorInfo.IME_ACTION_NEXT:
boolean result = false;
TextView v1 = (TextView) v.focusSearch(View.FOCUS_RIGHT);
if (v1 != null)
result = v1.requestFocus(View.FOCUS_RIGHT);
else if (!result)
{
v1 = (TextView) v.focusSearch(View.FOCUS_DOWN);
if (v1 != null)
result = v1.requestFocus(View.FOCUS_DOWN);
}
if (!result)
v.onEditorAction(actionId);
break;
default:
v.onEditorAction(actionId);
break;
}
return true;
}
});
元のリンク: https://groups.google.com/forum/?fromgroups=#!topic/Android-developers/OykOG6XtE8w
最大行数をxmlレイアウトファイルのEditText
ボックスに設定するだけです:Android:maxLength="1"
1行のコードを使用
tCNPCode.setSingleLine(true);
エンタープレスで次のアイテムに移動します