在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;
}
});
答案 0 :(得分:35)
您甚至不必使用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"
/>
解决了这个问题。
答案 1 :(得分:13)
您必须使用requestFocus
方法。在你的情况下,它将是:
tCNPCode.setOnKeyListener(new OnKeyListener() {
public boolean onKey(View v, int keyCode, KeyEvent event) {
if(keyCode == 66) {
txtCNPCode.requestFocus();
}
return false;
}
});
答案 2 :(得分:10)
最好的方法是使用inputType的其中一个选项,例如:android:inputType="textPersonName"
这将实现想要的效果。查看其他选项,它将为您节省一些时间:)
你不应该使用android:singleLine =“true”,因为它已被弃用。以下是有关文件的说明:
不推荐使用此属性,并将其替换为textMultiLine inputType属性中的标志。改变现有时要小心 布局,因为singeLine的默认值为false(多行 mode),但如果为inputType指定任何值,则默认为 单线模式。 (如果singleLine和inputType属性都是 发现,inputType标志将覆盖singleLine的值。)。
答案 3 :(得分:6)
考虑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”。键盘出现时带有Next键,其中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
答案 4 :(得分:1)
只需在xml布局文件中将最大行数设置为EditText
框:
android:maxLength="1"
答案 5 :(得分:0)
使用单行代码
my @a = 2 * @b;
在按Enter键时它将导航到下一个项目