2012-06-18 11 views
6

Quiero crear un diseño para una aplicación de Android que tiene un teclado numérico y toma cuatro dígitos para determinar si coincide con un valor de código preestablecido.Cómo crear una contraseña de cuatro dígitos Diseño de Android

He visto algunas aplicaciones usar esto, así que habría pensado que era un widget de alto nivel de alguna descripción.

La única cosa que puedo encontrar que es remotamente cerca de lo que yo quiero es éste:

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

Pero esto no es realmente lo que estoy buscando.

Cualquier entrada sería increíble y gracias de antemano.

EDIT: Aquí está una imagen de la pantalla de inicio de aplicación Dropbox iOS que me gustaría:

Dropbox iOS passcode screen

+3

uso 'androide: maxLength = 4' – Praveenkumar

+0

¿Cómo quieres que se vea como? cualquier rasguño? – xandy

+0

publique una imagen tal vez. eso ayudaría –

Respuesta

0

Al final he creado varios widgets personalizados.

Hay un widget de teclado. Hereda de TableLayout y tiene cuatro filas de tres botones. Cada botón modifica una Cadena, ya sea agregando dígitos o eliminándolos.

Otro widget que agregué se llamó PINEntry. Se necesita una sola int para especificar cuántos dígitos se han ingresado y muestra esa información en consecuencia.

Utilizo estos dos widgets en otra vista para recrear la pantalla de código de acceso.

+5

proporciona una referencia por favor –

4

¿Usted intentó añadir esto:

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

Esto se traduce en una mayor contraseña como la forma

Actualización: Implementaré cuatro EditText y los convertiré en maxLength = "1". Si alinea horizontalmente esto debería funcionar :)

0

que quieren crear un diseño para una aplicación para Android que tiene un teclado numérico y toma cuatro dígitos para determinar si coincide con un valor prefijado código de acceso .

Búsqueda de un teclado numérico de teléfono del cliente (por ejemplo Sipdroid (dialpad link), IMSDroid), la reconstrucción de la disposición a sus necesidades (por ejemplo, la eliminación de #, * y otras teclas que no es necesario).

utilizan los atributos sugeridas desde @Tim Messerschmidt

pensar fuera de una forma segura de almacenar y recuperar ese código PIN de 4 dígitos.

3

Soy principiante en Android. cuando me quedé atrapado en la codificación, siempre uso para referirme a stackoverflow. Aprendí muchas cosas de stackoverflow. Esta es la primera vez que me he atrevido a responder esta pregunta. Perdónenme si me equivoco y cualquier sugerencia con respecto a la codificación o la forma de escribir código en stackoverflow es muy apreciada. Gracias ..

he hecho algo como esto en fragmentos .. tomar 4 EditarTexto en conjunto y maxLength atributo a 1 en XML para los 4 EditTexts. Puede modificar EditText según su requisito.

Nota: El método OnKey puede o no invocarse para DEL (BackSpace) en Stock Keyboard de 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; 
          } 

Este método se utiliza para aprovechar las vistas.

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

Este método consiste en configurar los oyentes para cada 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); 
    } 

Estos son el método de anulación de la interfaz OnFocusChangeListner por el cual estoy comprobando que EditarTexto actualmente tiene el foco desde donde es útil a buscar número de cajas respectivas EditText en el método afterTextChnged (método de anulación de 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; 
    } 
    } 

Estos son los métodos de anulación de la interfaz TextWatcher. Aquí en este afterTextChanged (método de anulación) Estoy obteniendo el número de EdiTexts almacenándolos en el índice respectivo de charArray. Y una vez que el usuario ingrese el número en EditText, el siguiente EditText se enfocará mediante el método requestfocus (Ejemplo: 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; 
} 
} 

Este método funcionará como tecla de borrar (BackSpace).
En este método de sustitución, estoy comprobando si EditText está vacío y DEL (se presiona la tecla de retroceso en el teclado). si es verdadero, EditText anterior obtendrá el foco.

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

Imagen de muestra.

[1]: https://i.stack.imgur.com/DAc9y.jpg

+2

Bienvenido a stack overflow Er Prajesh. Por favor, no respondas una pregunta con un muro de código. Por favor describa su respuesta en la sección y señale cada parte importante del código que sea relevante para la pregunta. Si responde una pregunta con un código que el OP u otros entendieron, entonces esa respuesta no aporta conocimiento útil. –

+1

Respuesta útil ... –

+0

Gracias .... Gran respuesta –

Cuestiones relacionadas