2012-06-18 9 views
6

Desidero creare un layout per un'app per Android con un tastierino numerico e quattro cifre per determinare se corrisponde a un valore di passcode preimpostato.Come creare una password di quattro cifre Layout Android

Ho visto alcune applicazioni utilizzare questo, quindi avrei pensato che fosse un widget di alto livello di qualche descrizione.

L'unica cosa che posso trovare che è lontanamente vicino a quello che voglio è questo:

<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> 

Ma questo non è proprio quello che sto cercando.

Qualsiasi input sarebbe fantastico e grazie in anticipo.

EDIT: Ecco un'immagine della schermata iniziale set di app iOS che mi piacerebbe:

Dropbox iOS passcode screen

+3

uso 'Android: maxLength = 4' – Praveenkumar

+0

come si desidera assomigliare? qualsiasi graffio? – xandy

+0

pubblichi un'immagine forse. ciò aiuterebbe –

risposta

0

Alla fine ho creato più widget personalizzati.

C'è un widget Tastiera. Esso eredita da TableLayout e ha quattro righe di tre pulsanti. Ogni pulsante modifica una stringa - aggiungendo cifre o rimuovendole.

Un altro widget che ho aggiunto si chiamava PINEntry. Richiede un singolo int per specificare quante cifre sono state immesse e visualizza tali informazioni di conseguenza.

Uso questi due widget insieme in un'altra vista per ricreare la schermata del passcode.

+5

fornire un riferimento per favore –

4

Forse si tenta di aggiungere questo:

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

Questo si traduce in un più la password come modo.

Aggiornamento: implementerei quattro EditText e li rendere ogni maxLength = "1". Se li si allinea orizzontalmente questo dovrebbe funzionare :)

0

voglio creare un layout per un app Android che dispone di un tastierino numerico e prende quattro cifre per determinare se corrisponde un valore di codice di accesso preimpostato.

Cerca un tastierino numerico cliente di telefono (per esempio Sipdroid (dialpad link), IMSDroid), ricostruire il layout alle proprie esigenze (per esempio la rimozione #, * e altri tasti non è necessario).

utilizzare gli attributi suggeriti da @ Tim Messerschmidt

pensare fuori un modo sicuro per memorizzare e recuperare il codice PIN a 4 cifre.

3

Sono principiante in Android. quando mi sono bloccato nella codifica, utilizzo sempre per riferirmi a StackOverflow. Ho imparato molte cose dallo stackoverflow. Questa è la prima volta che ho avuto il coraggio di rispondere a questa domanda. Scusami se ho torto e qualsiasi suggerimento riguardante la codifica o il modo di scrivere codice in StackOverflow è molto apprezzato. Grazie ..

ho fatto qualcosa di simile in Fragments .. prendere 4 EditText in e impostare maxLength attributo da 1 in XML per tutti e 4 EditTexts. È possibile modificare EditText secondo le proprie esigenze.

Nota: il metodo OnKey può o non può essere invocato per DEL (BackSpace) in Stock KeyBoard per 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; 
          } 

Questo metodo è utilizzato per intessere le viste.

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(); 
    } 

Questo metodo consente di impostare gli ascoltatori per ciascun EditTexts.

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); 
    } 

Questi sono il metodo override OnFocusChangeListner interfaccia con cui sto controllando che EditText attualmente è focalizzare da dove è utile per recuperare il numero da rispettive EditText Scatole metodo afterTextChnged (metodo di sostituzione di 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; 
    } 
    } 

Questi sono il metodo di override di TextWatcher Interface. Qui in questo afterTextChanged (metodo di override) Sto recuperando il numero da EdiTexts memorizzandoli nel rispettivo indice di charArray. E una volta che l'utente immette il numero in EditText, il successivo EditText otterrà il focus con il metodo requestfocus (Esempio: 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; 
} 
} 

Questo metodo functionate chiave come delete (backspace).
In questo metodo di override sto controllando se EditText è vuoto e DEL (il backspace nella tastiera è premuto). se true il precedente EditText otterrà il focus.

@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; 
} 
} 

Immagine di esempio.

[1]

: https://i.stack.imgur.com/DAc9y.jpg

+2

Benvenuti allo stack overflow Er Prajesh. Si prega di non rispondere a una domanda con un muro di codice. Descrivi la tua risposta nella sezione e indica ogni parte importante del codice che è pertinente alla domanda. Se rispondi a una domanda con un codice comprovato dall'OP o da altri, allora quella risposta non contribuisce con conoscenze utili. –

+1

Risposta utile ... –

+0

Grazie .... Ottima risposta –

Problemi correlati