2017-09-15 13 views
1

ユーザーの4桁のPINを入力するためのビューを使用しています。 UIは、それぞれがmaxLengthを1に設定した4つの編集テキストで構成されています。テキスト1を編集するために値を入力すると、フォーカスは2番目の編集テキストに移動します。各Edittext入力タイプはnumberPasswordです。 JavaでEdittext入力タイプのパスワードで、フォーカスがクリアされた後でテキストが隠れていません。

<EditText 
      android:id="@+id/ed_1" 
      android:layout_width="20dp" 
      android:layout_height="20dp" 
      android:gravity="center" 
      android:inputType="numberPassword" 
      android:maxLength="1" /> 

、フォーカスを移動するために、我々はのEditTextのそれぞれに次のテキストウォッチャーを適用しています

ed1.addTextChangedListener(new TextWatcher() { 
     @Override 
     public void beforeTextChanged(CharSequence s, int start, int count, int after) { 

     } 

     @Override 
     public void onTextChanged(CharSequence s, int start, int before, int count) { 
      if (s.toString().length() == 1) { 
       ed1.clearFocus(); 
       ed2.requestFocus(); 
       ed2.setCursorVisible(true); 
      } 
     } 

     @Override 
     public void afterTextChanged(Editable s) { 

     } 
    }); 

問題のEditTextの値は*に変更されていない、である、それは本当を示し入力番号(パスワードに変更されません)。最初と最後だけが*に変わります。ここでは、2の編集テキスト2と3の編集テキスト3にはまだパスワードが表示されています。今

:私たちは、4入力が

所望の出力があるべきEdittextsあります| * | * | * | * |

指定したJavaコードを使用して値を入力し、フォーカスを切り替えると、次のように変更されます。(入力値:1234):| * | 2 | 3 | * |

中央の編集テキストのいずれかにフォーカスを戻すと、値がpasswordに変わります。それはフォーカスを取り除いたためですか?フィールドをパスワードに変更するのに必要な変換時間に時間がかかりますか?値を強制的にパスワードに変更できる方法はありますか?

+0

この2つの編集テキストではこのプロパティを使用していないため、コードを試してください。このプロパティを設定してください:android:inputType = "textPassword"とその完了した –

+0

私はそれがとても簡単だったと思います。すべてのedittextは、質問で指定されたものとまったく同じです。それぞれがandroid:inputType = "numberPassword" – user3099103

+0

Runnableにコードを入れて投稿してください。それは役に立ちますか? – lionscribe

答えて

0

遷移

yourEditText.setTransformationMethod(new PasswordTransformationMethod()); 

それは難しい方法ですが

String e1,e2,e3,e4; 
@Override 
public void onTextChanged(CharSequence s, int start, int before, int count) { 
if (s.toString().length() == 1 && !ed1.getText().equals("*")) { 
e1=ed1.getText(); 
ed1.setText("*"); 
ed2.requestFocus(); 
ed2.setCursorVisible(true); } } 

あなたがちょうどあなたのコードからed1.clearFocus();を削除するこの方法

+0

動作しません!まだ同じです – user3099103

+0

更新の回答! –

+0

ed1.setText( "*"); onTextChangedでは、条件trueで再びonTextChangedを呼び出し、無限ループに入り、ANRを引き起こします。 – user3099103

1

maxLengthを1に設定したので、1文字しか取得できません。また、onTextChangedにclearFocusのコードを書いたので、次のEditTextにフォーカスが設定されます。あなたはあなたのXMLで以下のように変更する必要があります。

<EditText 
    android:id="@+id/ed_1" 
    android:layout_width="20dp" 
    android:layout_height="20dp" 
    android:gravity="center" 
    android:inputType="numberPassword" 
    android:maxLength="4" /> 

また、onTextChanged()でclearFocusを削除します。

+0

UIはできません最大の長さが4の単一のedittextを使用することによって達成されます。それぞれが最大長を1とする4つのedittextが必要です。次のedittextに書き換えてください。 – user3099103

0

を使用することができた後、前のテキストに、次のコードを実行してみてください。 edittextに自分のフォーカスが奪われないようにしてください。他のedittextにフォーカスを取り戻すように伝えてください。ed2.requestFocus();前のedittextは、次のedittextがフォーカスを取得すると自動的にそのフォーカスを削除します。それは最初に値を変換し、その焦点を離します。

+0

しようとすると削除がクエリを入力しません。しかし、動作していません – user3099103

0

それはTextWatcher必要パスワードタイプにそれをchengeするためにいくつかの時間のように思える、 はので、私はハンドラを使用して、この溶液に上がってきた、それが正常に動作します。以下のコードを試してください

ed1.addTextChangedListener(new TextWatcher() { 
    @Override 
    public void beforeTextChanged(CharSequence s, int start, int count, int after) { 

    } 

    @Override 
    public void onTextChanged(CharSequence s, int start, int before, int count) { 
     if (s.toString().length() == 1) { 

      // use Handler for 1 second delay so that it will change text 
      new Handler().postDelayed(new Runnable() { 
       @Override 
       public void run() { 
        ed2.requestFocus(); 
       } 
      },1000); 

     } 
    } 

    @Override 
    public void afterTextChanged(Editable s) { 

    } 
}); 
+0

申し訳ありませんが動作していません – user3099103

+0

どのようなエラーがありますか?それは私のマシンでうまくいきます。 –

関連する問題