用户输入第一个字符后更改EditText inputType

时间:2014-10-11 20:21:41

标签: android android-edittext android-inputtype

我的xml文件中有EditText这样的内容:

<EditText
    android:id="@+id/InputPass"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="right"
    android:layout_marginBottom="20dp"
    android:layout_marginLeft="40dp"
    android:layout_marginRight="40dp"
    android:drawableLeft="@drawable/ic_lock"
    android:gravity="right"
    android:hint="رمز عبور"
    android:singleLine="true"
    android:textSize="18sp" />

出于某种原因,我想在用户输入第一个字符后更改其inputType。我这样试试:

Pass.addTextChangedListener(new TextWatcher() {

            @Override
            public void onTextChanged(CharSequence s, int start, int count, int after) {

            }

            @Override
            public void beforeTextChanged(CharSequence s, int start, int before, int count) {

                if(start == 0){
                    Pass.setInputType(InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);
                }
            }

            @Override
            public void afterTextChanged(Editable s) {
            }
        });

但它不起作用! 那里有人知道任何解决方案吗?

3 个答案:

答案 0 :(得分:1)

更改:

Pass.setInputType(InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);

致:

Pass.setTransformationMethod(PasswordTransformationMethod.getInstance());

答案 1 :(得分:0)

  

afterTextChanged

方法,尝试以下内容:

  @Override
        public void afterTextChanged(Editable s) {
            System.out.println("Editable: "+s);
            if(s.getText().toString().length ==1)
               Pass.setInputType(InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);
        }

答案 2 :(得分:0)

我通过这个获得了最好的结果:

Pass.setOnFocusChangeListener(new OnFocusChangeListener() {

    @Override
    public void onFocusChange(View v, boolean hasFocus) {
        if(hasFocus){
            Pass.setTransformationMethod(PasswordTransformationMethod.getInstance());
        }
    }
});