私はAndroidで初心者です。 私はいつもstackoverflowを参照するために使用するコーディングに立ち往生。私はstackoverflowから多くのことを学んだ。 私はこの質問に答えるのは初めてです。 もし私が間違っていると、コード化やコードの記述方法に関する提案は、stackoverflowで非常に高く評価されます。 ありがとう..
私は断片的にこのような何かをやっている.. は4のEditTextを取り、設定maxLengthの属性を1にXMLですべての4 EditTextsため。必要に応じてEditTextを変更することができます。
注:OnKeyメソッドは、Android Android KeyBoardのDEL(BackSpace)で呼び出されても、呼び出されなくてもかまいません。
public class VerifyCodeFrag extends Fragment implements TextWatcher,View.OnKeyListener,View.OnFocusChangeListener
{
private EditText et_digit1, et_digit2, et_digit3, et_digit4;//In this et_digit1 is Most significant digit and et_digit4 is least significant digit
private int whoHasFocus;
char[] code = new char[4];//Store the digits in charArray.
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState)
{
View view=inflater.inflate(R.layout.fragment_verify_code, container, false);
initializeView(view);
et_digit1.requestFocus();//Left digit gets focus after adding of fragment in Container
return view;
}
このメソッドは、ビューを非表示にするために使用されます。
private void initializeView(View view)
{
et_digit1 = (EditText) view.findViewById(R.id.et_vfcode_digit1);
et_digit2 = (EditText) view.findViewById(R.id.et_vfcode_digit2);
et_digit3 = (EditText) view.findViewById(R.id.et_vfcode_digit3);
et_digit4 = (EditText) view.findViewById(R.id.et_vfcode_digit4);
setListners();
}
このメソッドは、各EditTextのリスナーを設定します。
private void setListners()
{
et_digit1.addTextChangedListener(this);
et_digit2.addTextChangedListener(this);
et_digit3.addTextChangedListener(this);
et_digit4.addTextChangedListener(this);
et_digit1.setOnKeyListener(this);
et_digit2.setOnKeyListener(this);
et_digit3.setOnKeyListener(this);
et_digit4.setOnKeyListener(this);
et_digit1.setOnFocusChangeListener(this);
et_digit2.setOnFocusChangeListener(this);
et_digit3.setOnFocusChangeListener(this);
et_digit4.setOnFocusChangeListener(this);
}
これらは私のEditTextが現在afterTextChnged方法(TextWatcherのオーバーライドメソッド)にそれぞれのEditTextボックスから番号を取得するために有用であるからフォーカスを持っているチェックしていたことにより、インターフェイスOnFocusChangeListnerのオーバーライドメソッドです。
@Override
public void onFocusChange(View v, boolean hasFocus)
{
switch(v.getId())
{
case R.id.et_vfcode_digit1:
whoHasFocus=1;
break;
case R.id.et_vfcode_digit2:
whoHasFocus=2;
break;
case R.id.et_vfcode_digit3:
whoHasFocus=3;
break;
case R.id.et_vfcode_digit4:
whoHasFocus=4;
break;
default:
break;
}
}
これらは、TextWatcher Interfaceのオーバーライド方法です。 ここで、このafterTextChanged(メソッドのオーバーライド) 私は、それぞれのcharArrayのインデックスにそれらを格納しているEdiTextsから数値を取り出しています。 そして、ユーザーがEditTextに数字を入力すると、次のEditTextはrequestfocusメソッド(例:et_digit2.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 void afterTextChanged(Editable s)
{
switch (whoHasFocus)
{
case 1:
if(!et_digit1.getText().toString().isEmpty())
{
code[0]= et_digit1.getText().toString().charAt(0);
et_digit2.requestFocus();
}
break;
case 2:
if(!et_digit2.getText().toString().isEmpty())
{
code[1]= et_digit2.getText().toString().charAt(0);
et_digit3.requestFocus();
}
break;
case 3:
if(!et_digit3.getText().toString().isEmpty())
{
code[2]= et_digit3.getText().toString().charAt(0);
et_digit4.requestFocus();
}
break;
case 4:
if(!et_digit4.getText().toString().isEmpty())
{
code[3]= et_digit4.getText().toString().charAt(0);
}
break;
default:
break;
}
}
このメソッドはdelete(BackSpace)キーとして機能します。
このオーバーライド方法では、私はEditTextが空でDEL(キーパッドのバックスペースが押されている)かどうかをチェックしています。 trueの場合、前のEditTextがフォーカスを取得します。
@Override
public boolean onKey(View v, int keyCode, KeyEvent event)
{
if (event.getAction() == KeyEvent.ACTION_DOWN)
{
if (keyCode == KeyEvent.KEYCODE_DEL)
{
switch(v.getId())
{
case R.id.et_vfcode_digit2:
if (et_digit2.getText().toString().isEmpty())
et_digit1.requestFocus();
break;
case R.id.et_vfcode_digit3:
if (et_digit3.getText().toString().isEmpty())
et_digit2.requestFocus();
break;
case R.id.et_vfcode_digit4:
if (et_digit4.getText().toString().isEmpty())
et_digit3.requestFocus();
break;
default:
break;
}
}
}
return false;
}
}
サンプル画像。
[1]:https://i.stack.imgur.com/DAc9y.jpg
使用 'アンドロイド:maxLengthの= 4' – Praveenkumar
あなたはそれが次のようになりたいですか?何か傷つき? – xandy
画像を投稿する可能性があります。それは助ける –