2012-06-18 18 views
6

数字キーパッドを持つAndroidアプリのレイアウトを作成し、4桁の数字を使用してパスコード値が一致するかどうかを確認します。4桁のパスワードAndroidレイアウトを作成する方法

私はいくつかのアプリケーションでこれを使用しているのを見てきました。だから、それは何らかの記述の上位レベルのウィジェットだと思っていたでしょう。私はそれは私が欲しいものをリモート近いです見つけることができます

唯一のものはこれです:

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

しかし、これは私が探しているものを実際にはありません。

すべての入力はすばらしく、事前に感謝します。

編集:ここでのiOSのDropboxアプリの画像は、私が好きな画面を起動します:

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

これは、より多くのパスワードになり:

Dropbox iOS passcode screen

+3

使用 'アンドロイド:maxLengthの= 4' – Praveenkumar

+0

あなたはそれが次のようになりたいですか?何か傷つき? – xandy

+0

画像を投稿する可能性があります。それは助ける –

答えて

0

最後に、私は複数のカスタムウィジェットを作成しました。

キーパッドウィジェットがあります。それはTableLayoutから継承し、3つのボタンの4つの行を持っています。各ボタンは、数字を追加するか削除するかのいずれかで文字列を変更します。

私が追加した別のウィジェットは、PINEntryと呼ばれていました。入力された桁数を指定するのに1つのintが必要であり、それに応じてその情報が表示されます。

別のビューでこれら2つのウィジェットを一緒に使用して、パスコード画面を再作成します。

+5

参照を提供してください –

4

これを追加してみてくださいました似たような方法。

アップデート:私は4つのEditTextを実装し、それぞれのmaxLength = "1"にします。 あなたが水平にそれらを合わせた場合、これは動作するはずです:)

0

私はテンキー を持っており、それはプリセットパスコード 値と一致するかどうかを判断するために4桁の数字を取るAndroidアプリのレイアウトを作成したいです。

電話のクライアントテンキー(例えばSipDroid(dialpad link)、IMSDroid)を検索するには、あなたのニーズにレイアウトを再構築する(例えば削除#、*、および他のキーあなたは必要ありません)。

は@Tim Messerschmidt

から提案された属性を使用している4桁のPINコードを格納および取得するための安全な方法の外に考えてみてください。

3

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

+2

へようこそスタックオーバーフローEr Prajesh。コードの壁に質問に答えないでください。あなたの答えをセクションに記入し、質問に関連するコードの重要な部分をそれぞれ指摘してください。 OPや他の人が理解したコードで質問に答えると、その答えは有益な知識に貢献しません。 –

+1

便利な答え... –

+0

ありがとうございました.... –

関連する問題