第一次输入后,EditText 留在键盘后面

EditText stays behind the keyboard after first input

有两个 EditText,如果用户在第一个输入四个字符,焦点会自动转到另一个 EditText。当用户在第二个 EditText 中输入第一个字符时,滚动中断并且第二个编辑文本开始留在键盘后面。

此外,当用户关注第二个 EditText 时,它仍然停留在键盘后面。如果用户首先关注第一个 EditText 然后关闭键盘并关注第二个 EditText,滚动效果完美。

只有 Samsung Galaxy Grand Prime(Android 4.4.4 版本) 才会出现此问题。

你能帮助解决这种奇怪的行为吗?


MyActivity.java

@Override
protected void onCreate(Bundle savedInstanceState) {
    //.....

    txtNewPin.setFocusable(true);
    txtNewPin2.setFocusable(true);
    txtNewPin.requestFocus();

    InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
    imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);

    txtNewPin.addTextChangedListener(getTextChangedListener_txtNewPin());
    txtNewPin2.addTextChangedListener(getTextChangedListener_txtNewPin2());

    //.....
}

private TextWatcher getTextChangedListener_txtNewPin() {
    return new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence s, int start, int before, int count) {

        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            if (s.length() == 4) {
                txtNewPin.clearFocus();
                txtNewPin2.requestFocus();
            }
        }

        @Override
        public void afterTextChanged(Editable editable) {

        }
    };
}

private TextWatcher getTextChangedListener_txtNewPin2() {
    return new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence s, int start, int before, int count) {

        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            if (s.length() == 4) {
                kart_sifre_degistir_button.performClick();
            }
        }

        @Override
        public void afterTextChanged(Editable editable) {

        }
    };
}


我的活动xml

第一个 EditText id : yeni_sifre_bir
第二个 EditText id:yeni_sifre_iki
第三个 EditText id:textview_editText_search(这个非常好用!!

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.xxxx.hce.HCEKartSifreDegistirme">

    <RelativeLayout
        android:id="@+id/creditCardBackground"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        ...>

        ....

    </RelativeLayout>

    <LinearLayout
        android:id="@+id/sinan1"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_below="@+id/creditCardBackground"
        android:layout_marginTop="10dp"
        android:background="@color/light_gray"
        android:descendantFocusability="beforeDescendants"
        android:focusable="true"
        android:focusableInTouchMode="true"
        android:imeOptions="flagNoFullscreen"
        android:orientation="vertical">

        <com.xxxx.yyyyyy.BlackBrandTextview
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="10dp"
            android:gravity="center"
            android:text="4 haneli yeni HCE kart şifrenizi belirleyin"
            android:textSize="14dp" />

        <com.xxxx.yyyyyy.EdittextObject
            android:id="@+id/yeni_sifre_bir"
            android:layout_width="240dp"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:layout_marginTop="5dp"
            android:background="@drawable/edittext_shape"
            android:focusable="true"
            android:focusableInTouchMode="true"
            android:gravity="center"
            android:imeOptions="flagNoFullscreen"
            android:inputType="numberPassword"
            android:maxLength="4"
            android:padding="5dp"
            android:textSize="24dp" />

        <com.xxxx.yyyyyy.BlackBrandTextview
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="10dp"
            android:gravity="center"
            android:text="Yeni  şifrenizi tekrar giriniz"
            android:textSize="14dp" />

        <com.xxxx.yyyyyy.EdittextObject
            android:id="@+id/yeni_sifre_iki"
            android:layout_width="240dp"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:layout_marginTop="5dp"
            android:background="@drawable/edittext_shape"
            android:focusable="true"
            android:focusableInTouchMode="true"
            android:gravity="center"
            android:imeOptions="flagNoFullscreen"
            android:inputType="numberPassword"
            android:maxLength="4"
            android:padding="5dp"
            android:textSize="24dp" />
    </LinearLayout>

    <EditText
        android:id="@+id/textview_editText_search"
        android:layout_width="300dp"
        android:layout_height="40dp"
        android:layout_above="@+id/kart_sifre_degistir_button"
        android:layout_centerVertical="true"
        android:background="@color/White"
        android:paddingLeft="10dp"
        android:textColor="@color/Black" />

    <com.xxxx.yyyyyy.ButtonObject
        android:id="@+id/kart_sifre_degistir_button"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_marginBottom="15dp"
        android:layout_marginLeft="10dp"
        android:layout_marginRight="10dp"
        android:layout_marginTop="5dp"
        android:background="@drawable/button_shape_dijitalkartekle"
        android:text="Onayla"
        android:textColor="@color/White" />
</RelativeLayout>


Manifest.xml

<activity
     android:name="com.xxxxx.yyyyy.MyActivity"
     android:label="@string/title_activity_hcekart_sifre_degistirme"
     android:screenOrientation="portrait" >


我意识到问题是由于在第二个 EditText 中输入一个字符后失去了焦点。突然失去焦点!

试试 afterTextChanged

private TextWatcher getTextChangedListener_txtNewPin() {
return new TextWatcher() {
    @Override
    public void beforeTextChanged(CharSequence s, int start, int before, int count) {

    }

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

    }

    @Override
    public void afterTextChanged(Editable editable) {
       if (editable.length() == 4) {
            txtNewPin.clearFocus();
            txtNewPin2.requestFocus();
        }
    }
};

}

已解决。我已经更改了布局 MyActivity.xml 如下(使用 ScrollView 和 RelativeLayout 而不是 LinearLayout)

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <RelativeLayout
            android:id="@+id/creditCardBackground"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            .... >

            ....

        </RelativeLayout>

        <RelativeLayout
            android:layout_below="@+id/creditCardBackground"
            android:layout_marginTop="20dp"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="@color/...">

            <com.xxx.yyy.BlackBrandTextview
                android:id="@+id/limit_info_text"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:gravity="center_horizontal"
                android:padding="10dp"
                android:text="...."
                android:textColor="@color/..." />

            <RelativeLayout
                android:id="@+id/relative_oran_alt_giris"
                android:layout_below="@+id/limit_info_text"
                android:layout_marginLeft="30dp"
                android:layout_marginRight="30dp"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:visibility="visible" >

                <com.xxx.yyy.BlackBrandTextview
                    android:id="@+id/tutaroraninfoaltkucuk_oran"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_marginTop="10dp"
                    android:gravity="center"
                    android:textSize="14dp"
                    android:text="..." />

                <com.xxx.yyy.EdittextObject
                    android:id="@+id/yeni_sifre_bir"
                    android:layout_below="@+id/tutaroraninfoaltkucuk_oran"
                    android:layout_width="240dp"
                    android:layout_height="wrap_content"
                    android:background="@drawable/..."
                    android:gravity="center"
                    android:inputType="numberPassword"
                    android:layout_marginTop="5dp"
                    android:maxLength="4"
                    android:padding="5dp"
                    android:textSize="24dp"
                    android:layout_centerHorizontal="true"/>

                <com.xxx.yyy.BlackBrandTextview
                    android:id="@+id/tutaroraninfoaltkucuk_oran1"
                    android:layout_below="@+id/yeni_sifre_bir"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_marginTop="10dp"
                    android:gravity="center"
                    android:textSize="14dp"
                    android:text="..." />

                <com.xxx.yyy.EdittextObject
                    android:id="@+id/yeni_sifre_iki"
                    android:layout_below="@+id/tutaroraninfoaltkucuk_oran1"
                    android:layout_width="240dp"
                    android:layout_height="wrap_content"
                    android:background="@drawable/..."
                    android:gravity="center"
                    android:inputType="numberPassword"
                    android:layout_marginTop="5dp"
                    android:maxLength="4"
                    android:padding="5dp"
                    android:textSize="24dp"
                    android:layout_alignParentBottom="true"
                    android:layout_centerHorizontal="true"/>

            </RelativeLayout>

            <com.xxx.yyy.ButtonObject
                android:id="@+id/kart_sifre_degistir_button"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_marginLeft="10dp"
                android:layout_marginRight="10dp"
                android:layout_marginBottom="10dp"
                android:layout_marginTop="285dp"
                android:background="@drawable/...."
                android:text="Onayla"
                android:textColor="@color/..." />

        </RelativeLayout>

    </RelativeLayout>

</ScrollView>