मैं एंड्रॉइड में शुरुआत कर रहा हूं। जब मैं कोडिंग में फंस गया तो मैं हमेशा स्टैक ओवरफ्लो को संदर्भित करने के लिए उपयोग करता हूं। मैंने स्टैक ओवरफ्लो से बहुत सारी चीजें सीखी हैं। यह पहली बार है जब मैंने इस प्रश्न का उत्तर देने की हिम्मत की है। मुझे क्षमा करें यदि मैं गलत हूं और कोडिंग या स्टैक ओवरफ्लो में कोड लिखने के तरीके के बारे में कोई सुझाव अत्यधिक सराहना करता है। धन्यवाद ..
मैं टुकड़े में कुछ इस तरह किया है .. 4 EditText सभी 4 EditTexts के लिए एक्सएमएल में 1 करने के लिए ले लो और सेट maxLength विशेषता। आप अपनी आवश्यकता के अनुसार एडिटटेक्स्ट को संशोधित कर सकते हैं।
नोट: OnKey विधि या स्टॉक Android कीबोर्ड में डेल (बैकस्पेस) के लिए लागू कर सकते हैं नहीं किया जा सकता नहीं किया।
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;
}
इस विधि विचारों intilize किया जाता है।
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();
}
यह विधि श्रोताओं को प्रत्येक संपादन टेक्स्ट के लिए सेट करना है।
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);
}
इन इंटरफेस OnFocusChangeListner जिसके द्वारा मैं जाँच कर रहा हूँ की ओवरराइड विधि है जो EditText वर्तमान में जहां यह उपयोगी है afterTextChnged विधि में संबंधित EditText बॉक्स (TextWatcher की ओवरराइड विधि) से नंबर लाने के लिए से ध्यान केंद्रित किया है।
@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;
}
}
ये टेक्स्टवॉचर इंटरफ़ेस की ओवरराइड विधि हैं। यहाँ इस afterTextChanged (ओवरराइड विधि) में मैं उन्हें charArray के संबंधित सूचकांक में भंडारण EdiTexts से नंबर प्राप्त करने में कठिनाई रहा हूँ। और एक बार जब उपयोगकर्ता एडिटटेक्स्ट में नंबर दर्ज करता है तो अगला एडिटटेक्स्ट 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;
}
}
यह विधि हटाएं (बैकस्पेस) कुंजी के रूप में कार्य करेगी।
इस ओवरराइड विधि में मैं जांच रहा हूं कि एडिटटेक्स्ट खाली है या डीएल (कीपैड में बैकस्पेस दबाया गया है)। यदि सही है तो पिछले संपादन टेक्स्ट को फोकस मिलेगा।
@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
शायद एक छवि पोस्ट करें। कि –