隣接する 3 つの EditText フィールドがあり、それぞれにユーザーが選択した 6 文字を入力します。私が欲しいのは、ユーザーが最初の EditText フィールドに 6 番目の文字を入力し終えるとすぐに、カーソルが自動的に 2 番目の EditText フィールドに移動することです。2 番目 -> 3 番目も同様です。どうすればこれを行うことができますか?
4 に答える
1
KeyListener
最初にa を実装するだけですEditText
( としましょうeditTextOne
)。
キーが押されるたびに、 の長さがeditTextOne
6 に等しいかどうかを確認し、2 番目のメソッド (つまり ) を呼び出して、カーソルを 2 番目のキーに移動requestFocus()
しeditText
ますeditTextTwo.requestFocus()
。
于 2013-06-10T13:01:28.630 に答える
1
そのように使う
edittext1.setOnKeyListener(new OnKeyListener() {
public boolean onKey(View v, int keyCode, KeyEvent event) {
if(edittext1.getText().toString().length()==6) {
edittext2.requestFocus();
}
return false;
}
});
于 2013-06-10T13:11:55.740 に答える
0
この場合、適切なリスナーを使用する必要があります: TextWatcher
以下のコードを操作します。
package com.example.stackoverflow;
import android.os.Bundle;
import android.app.Activity;
import android.text.Editable;
import android.text.InputFilter;
import android.text.TextWatcher;
import android.view.Menu;
import android.widget.EditText;
import android.widget.Toast;
public class SimpleActivity10 extends Activity {
private final short MAXCHAR = 6;
private EditText editText1, editText2, editText3;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.simple_activity10);
editText1 = (EditText) this.findViewById(R.id.editText1);
editText2 = (EditText) this.findViewById(R.id.editText2);
editText3 = (EditText) this.findViewById(R.id.editText3);
editText1.addTextChangedListener(textWatcher1);
editText2.addTextChangedListener(textWatcher2);
InputFilter[] FilterArray = new InputFilter[1];
FilterArray[0] = new InputFilter.LengthFilter(MAXCHAR);
editText1.setFilters(FilterArray);
editText2.setFilters(FilterArray);
editText3.setFilters(FilterArray);
}
private TextWatcher textWatcher1 = new TextWatcher() {
@Override
public void afterTextChanged(Editable editable) {
int messageLength = editable.toString().length();
if (messageLength == MAXCHAR) {
Toast.makeText(getApplicationContext(), "EditText 2 get focus!", Toast.LENGTH_SHORT).show();
editText2.requestFocus();
}
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
};
private TextWatcher textWatcher2 = new TextWatcher() {
@Override
public void afterTextChanged(Editable editable) {
int messageLength = editable.toString().length();
if (messageLength == MAXCHAR) {
Toast.makeText(getApplicationContext(), "EditText 3 get focus!", Toast.LENGTH_SHORT).show();
editText3.requestFocus();
}
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
};
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.simple_activity10, menu);
return true;
}
}
そしてレイアウト:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/LinearLayout1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".SimpleActivity10" >
<EditText
android:id="@+id/editText1"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:ems="10" >
<requestFocus />
</EditText>
<EditText
android:id="@+id/editText2"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:ems="10" />
<EditText
android:id="@+id/editText3"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:ems="10" />
</LinearLayout>
于 2013-06-10T13:58:56.580 に答える
0
これを試して。
mEtText.addTextChangedListener(新しいTextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
// TODO Auto-generated method stub
if(mEtText.getText().length() == 6){
secondEditText.requestFocus();
}
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
// TODO Auto-generated method stub
}
@Override
public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub
}
});
于 2013-06-10T13:18:23.807 に答える