2012-06-18 4 views
6

मैं एक एंड्रॉइड ऐप के लिए एक लेआउट बनाना चाहता हूं जिसमें एक संख्यात्मक कीपैड है और यह निर्धारित करने के लिए चार अंक लेता है कि यह प्रीसेट पासकोड मान से मेल खाता है या नहीं।चार अंकों का पासवर्ड कैसे बनाएं एंड्रॉइड लेआउट

मैंने कुछ अनुप्रयोगों का उपयोग किया है, इसलिए मैंने सोचा होगा कि यह कुछ विवरण का एक उच्च स्तरीय विजेट था।

<EditText 
    android:id="@+id/editText1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_weight="1" 
    android:ems="10" 
    android:inputType="numberPassword" > 

    <requestFocus /> 
</EditText> 

लेकिन यह वास्तव में नहीं है मैं क्या देख रहा हूँ:

केवल एक चीज मुझे लगता है कि दूर से जो मैं चाहता के काफी करीब है पा सकते हैं यह है।

कोई इनपुट अद्भुत होगा और अग्रिम धन्यवाद।

संपादित करें:

android:maxLength="4" 
android:password="true" 

यह एक अधिक पासवर्ड का परिणाम:

Dropbox iOS passcode screen

+3

उपयोग 'एंड्रॉयड: maxLength = 4' – Praveenkumar

+0

आप इसे कैसे की तरह लग रहे करना चाहते हैं? कोई खरोंच? – xandy

+0

शायद एक छवि पोस्ट करें। कि –

उत्तर

0

अंत में मैंने कई कस्टम विजेट बनाए।

एक कीपैड विजेट है। यह TableLayout से प्राप्त होता है और इसमें तीन बटनों की चार पंक्तियां होती हैं। प्रत्येक बटन एक स्ट्रिंग को संशोधित करता है - या तो अंक जोड़ना या उन्हें हटा देना।

मैंने जो भी विजेट जोड़ा, उसे पिनएन्ट्री कहा जाता था। यह निर्दिष्ट करने के लिए एक ही int लेता है कि कितने अंक दर्ज किए गए हैं और तदनुसार उस जानकारी को प्रदर्शित करते हैं।

मैं पासकोड स्क्रीन को फिर से बनाने के लिए इन दो विगेट्स को एक और दृश्य में एक साथ उपयोग करता हूं।

+5

एक संदर्भ कृपया ढेर अतिप्रवाह एर Prajesh –

4

आप इस जोड़ने का प्रयास किया: यहाँ है कि मैं चाहता हूँ आईओएस ड्रॉपबॉक्स एप्लिकेशन प्रारंभ स्क्रीन की एक छवि है रास्ते की तरह

अपडेट: मैं चार एडिटटेक्स्ट को लागू करता हूं और उन्हें प्रत्येक अधिकतम लम्बाई = "1" बना देता हूं। इस काम करना चाहिए आप उन्हें क्षैतिज संरेखित हैं :)

0

मैं एक संख्यात्मक कीपैड है और अगर यह एक पूर्व निर्धारित पासकोड मान से मेल खाता निर्धारित करने के लिए चार अंक ले जाता है कि एक Android ऐप्लिकेशन के लिए एक लेआउट बनाना चाहते हैं। एक फोन ग्राहक संख्यात्मक कीपैड के लिए

खोजें (जैसे SipDroid (dialpad link), IMSDroid), अपनी आवश्यकताओं (जैसे # को हटाने, * और अन्य चाबियाँ आप की जरूरत नहीं है) करने के लिए लेआउट को फिर से संगठित।

@Tim Messerschmidt से सुझाव विशेषताओं का उपयोग

की दुकान और कहा कि 4 अंकों के पिन कोड को पुनः प्राप्त करने के लिए एक सुरक्षित रास्ते से बाहर सोचो।

3

मैं एंड्रॉइड में शुरुआत कर रहा हूं। जब मैं कोडिंग में फंस गया तो मैं हमेशा स्टैक ओवरफ्लो को संदर्भित करने के लिए उपयोग करता हूं। मैंने स्टैक ओवरफ्लो से बहुत सारी चीजें सीखी हैं। यह पहली बार है जब मैंने इस प्रश्न का उत्तर देने की हिम्मत की है। मुझे क्षमा करें यदि मैं गलत हूं और कोडिंग या स्टैक ओवरफ्लो में कोड लिखने के तरीके के बारे में कोई सुझाव अत्यधिक सराहना करता है। धन्यवाद ..

मैं टुकड़े में कुछ इस तरह किया है .. 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

+2

में आपका स्वागत है प्रदान करते हैं। कृपया कोड की दीवार के साथ एक प्रश्न का उत्तर न दें। कृपया अनुभाग में अपने उत्तर का वर्णन करें और प्रश्न के प्रासंगिक कोड के प्रत्येक महत्वपूर्ण भाग को इंगित करें। यदि आप कोड के साथ एक प्रश्न का उत्तर देते हैं जिसे ओपी या अन्य समझते हैं तो वह उत्तर उपयोगी ज्ञान का योगदान नहीं देता है। –

+1

उपयोगी उत्तर ... –

+0

धन्यवाद .... महान उत्तर –