根据How to automatically move to the next edit text in android发布的问题和答案,我使用代码移动到下一个编辑框。
et1.addTextChangedListener(new TextWatcher() {
public void onTextChanged(CharSequence s, int start,int before, int count)
{
// TODO Auto-generated method stub
if(et1.getText().toString().length()==size) //size as per your requirement
{
et2.requestFocus();
}
}
public void beforeTextChanged(CharSequence s, int start,
int count, int after) {
// TODO Auto-generated method stub
}
public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub
}
});
我面临的问题是,如果我输错了,那么即使用户明确请求焦点,由于文本观察器中的代码,文本框也会移动到下一个。我能做些什么来阻止这种情况发生吗?
答案 0 :(得分:29)
可能会很晚但我有一个更容易应用的解决方案。只需将此代码添加到layout.xml 文件中的edittext字段即可。将此添加到您要显示下一个按钮而非完成按钮的edittext。所以 会指向下一个Edittext字段。
android:imeOptions="actionNext"
答案 1 :(得分:15)
如果你想在下一个EditText上关注输入按下,你可以使用XML代码中的那些选项来关注下一个EditText:
选项1:
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:imeOptions="actionNext"
android:singleLine="true"/>
选项2:
<EditText
android:id="@+id/et1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:singleLine="true"
android:nextFocusForward="@+id/et2"/>
<EditText
android:id="@+id/et2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:singleLine="true"/>
答案 2 :(得分:9)
您可以检查为1st EditText按下的键,如果是“Enter”键,则将焦点移至下一个EditText。
这可能会对您有所帮助:KeyCode_Enter to next edittext
答案 3 :(得分:5)
您需要验证用户输入以满足您的期望。如果符合,则只调用et2.requestFocus()
答案 4 :(得分:3)
对我有用:
final EditText code1=((EditText)view.findViewById(R.id.code1));
final EditText code2=((EditText)view.findViewById(R.id.code2));
final EditText code3=((EditText)view.findViewById(R.id.code3));
final EditText code4=((EditText)view.findViewById(R.id.code4));
OnKeyListener key=new OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if(!((EditText) v).toString().isEmpty())
v.focusSearch(View.FOCUS_RIGHT).requestFocus();
return false;
}
};
code1.setOnKeyListener(key);
code2.setOnKeyListener(key);
code3.setOnKeyListener(key);
答案 5 :(得分:1)
您还可以检查您的if条件是否正确..
if(et1.getText().toString().length()==size) //size as per your requirement
{
if(et1.gettext.toString().equals(somethingwhichyouhavecheck))
{
et2.requestFocus();
}
else
{
}
}
答案 6 :(得分:1)
此代码按预期工作。
etFName.setOnKeyListener(new OnKeyListener() {
public boolean onKey(View v, int keyCode, KeyEvent event) {
if(etFName.getText().toString().length()==4 && keyCode == KeyEvent.KEYCODE_BACK)
{
typinget1 = true;
}
else if(etFName.getText().toString().length()==4 && typinget1==true) //size as per your requirement
{
typinget1 = false;
etLName.requestFocus();
}
else if(etFName.getText().toString().length()<=4 && typinget1==false)
{
typinget1 = true;
}
return false;
}
});
答案 7 :(得分:0)
此代码对我有用
private void managePinView(final ArrayList<MaterialEditText> editTexts) {
last = editTexts.size();
last--;
editTexts.get(0).requestFocus();
for (int i = 0; i < editTexts.size(); i++) {
final int finalI = i;
editTexts.get(finalI).addTextChangedListener(new TextWatcher() {
public void onTextChanged(CharSequence s, int start, int before,
int count) {
convertText(editTexts.get(finalI), s, this); // i can use this function to change english number to persian number if do not use comment this
int textLength = editTexts.get(finalI).getText().length();
next = finalI + 1;
previous = finalI - 1;
if (textLength >= 1) {
if (next <= last)
editTexts.get(next).requestFocus();
} else {
if (previous >= 0) {
editTexts.get(previous).requestFocus();
}
}
}
@Override
public void afterTextChanged(Editable s) {
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
}
});
}
}
private void convertText(MaterialEditText editText, CharSequence charSequence, TextWatcher watcher) {
String updatedString = G.convertEnNumberToFi("" + editText.getText().toString().substring(0, editText.length()));
editText.removeTextChangedListener(watcher);
editText.setText(updatedString);
editText.setSelection(charSequence.length());
editText.addTextChangedListener(watcher);
}
答案 8 :(得分:0)
这是我在recyclerview或listview或任何其他视图中使用editext的方法。
edittext.setOnEditorActionListener { textView, actionId, _ ->
if (actionId == EditorInfo.IME_ACTION_NEXT) {
var view = textView.focusSearch(View.FOCUS_DOWN)
while (view != null) {
if (view is EditText) {
view.isCursorVisible = true
return@setOnEditorActionListener view.requestFocus()
}
view = view.focusSearch(View.FOCUS_DOWN)
}
}
false
}
答案 9 :(得分:-4)
我有一个非常简单的解决方案,只需在xml edittext控件中添加以下属性
<强>机器人:的inputType =&#34; textPersonName&#34; 强>