【问题标题】:Editext input type behaves weirdlyEdittext 输入类型行为怪异
【发布时间】:2016-11-22 06:32:03
【问题描述】:

我有 4 个输入类型为 numberPassword 的编辑文本,每个的最大长度为 1。只要输入一个数字,我就会以编程方式将焦点更改为下一个字段。我希望在将焦点更改为下一个字段后立即屏蔽数字,但是当我在 3 岁时,只有 1 被屏蔽,或者当我在 4 岁时,3 和 2 被屏蔽但不是1,有时它们都没有被掩盖,但是一旦我手动专注于任何领域,它就会被掩盖。我也希望有一些一致性,当焦点更改为下一个字段时,最后一个字段应该被屏蔽。

Xml 布局:

 <android.support.constraint.ConstraintLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="32dp"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/textView3"
        tools:layout_constraintLeft_creator="1"
        tools:layout_constraintRight_creator="1">

               <EditText
            android:id="@+id/et_mpin_1"
            android:layout_width="51dp"
            android:layout_height="44dp"
            android:ems="10"
            android:gravity="center_horizontal"
            android:inputType="numberPassword"
            android:maxLength="1"
            android:maxLines="1"
            android:imeOptions="actionNext"
            android:focusableInTouchMode="true"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            tools:layout_constraintLeft_creator="1"
            tools:layout_constraintTop_creator="1">
            <requestFocus />
        </EditText>

        <EditText
            android:id="@+id/et_mpin_2"
            android:layout_width="51dp"
            android:layout_height="0dp"
            android:layout_marginStart="8dp"
            android:ems="10"
            android:gravity="center_horizontal"
            android:inputType="numberPassword"
            android:maxLength="1"
            android:maxLines="1"
            android:imeOptions="actionNext"
            app:layout_constraintBottom_toBottomOf="@+id/et_mpin_1"
            app:layout_constraintLeft_toRightOf="@+id/et_mpin_1"
            app:layout_constraintTop_toTopOf="@+id/et_mpin_1"
            app:layout_constraintVertical_bias="0.0"
            tools:layout_constraintBottom_creator="1"
            tools:layout_constraintTop_creator="1" />

        <EditText
            android:id="@+id/et_mpin_4"
            android:layout_width="51dp"
            android:layout_height="0dp"
            android:layout_marginStart="8dp"
            android:ems="10"
            android:gravity="center_horizontal"
            android:inputType="numberPassword"
            android:maxLength="1"
            android:maxLines="1"
            android:imeOptions="actionDone"
            app:layout_constraintBottom_toBottomOf="@+id/et_mpin_1"
            app:layout_constraintLeft_toRightOf="@+id/et_mpin_3"
            app:layout_constraintTop_toTopOf="@+id/et_mpin_1"
            app:layout_constraintVertical_bias="0.0"
            tools:layout_constraintBottom_creator="1"
            tools:layout_constraintTop_creator="1" />

        <EditText
            android:id="@+id/et_mpin_3"
            android:layout_width="51dp"
            android:layout_height="0dp"
            android:layout_marginEnd="59dp"
            android:layout_marginStart="59dp"
            android:ems="10"
            android:gravity="center_horizontal"
            android:inputType="numberPassword"
            android:maxLength="1"
            android:maxLines="1"
            android:imeOptions="actionNext"
            app:layout_constraintBottom_toBottomOf="@+id/et_mpin_1"
            app:layout_constraintLeft_toLeftOf="@+id/et_mpin_2"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toTopOf="@+id/et_mpin_1"
            app:layout_constraintVertical_bias="1.0"
            tools:layout_constraintBottom_creator="1"
            tools:layout_constraintLeft_creator="1"
            tools:layout_constraintRight_creator="1"
            tools:layout_constraintTop_creator="1" />
    </android.support.constraint.ConstraintLayout>

Java 代码:

et_mpin1.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
//                et_mpin1.setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD);
//                et_mpin1.setTransformationMethod(PasswordTransformationMethod.getInstance());
            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                // checking before only because for max lenght 1 start is always going to be 0
                if (before == 0) {

                    et_mpin2.requestFocus();
                }

            }

            @Override
            public void afterTextChanged(Editable s) {

            }
        });
        et_mpin2.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) {
                // checking before only because for max lenght 1 start is always going to be 0
                if (before == 0) {
                    et_mpin3.requestFocus();
                } else {
                    et_mpin1.requestFocus();
                }
            }

            @Override
            public void afterTextChanged(Editable s) {

            }
        });
        et_mpin3.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) {
                // checking before only because for max lenght 1 start is always going to be 0
                if (before == 0) {
                    et_mpin4.requestFocus();
                } else {
                    et_mpin2.requestFocus();
                }
            }

            @Override
            public void afterTextChanged(Editable s) {

            }
        });
        et_mpin4.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) {
                // checking before only because for max lenght 1 start is always going to be 0
                if (before == 0) {
                    InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(getContext().INPUT_METHOD_SERVICE);
                    imm.hideSoftInputFromWindow(et_mpin4.getWindowToken(), 0);
                } else {
                    et_mpin3.requestFocus();
                }
            }

            @Override
            public void afterTextChanged(Editable s) {

            }
        });

【问题讨论】:

    标签: android android-layout android-edittext settings


    【解决方案1】:

    强制隐藏密码,

    android.provider.Settings.System.putInt(this.getContentResolver(),android.provider.Settings.System.TEXT_SHOW_PASSWORD, 0);
    

    注意:它不会显示任何字符,直接点将是 在您的视图中毫无延迟地显示。

    【讨论】:

    • 你能举个小例子,它是如何与edittext一起使用的吗
    • @Sunny 你不用EditText你只需要写在Activity
    • @Sunny 很高兴知道这一点。
    猜你喜欢
    • 2016-03-19
    • 2010-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-15
    • 2016-04-18
    • 2014-01-11
    相关资源
    最近更新 更多