首次输入后,EditText会保留在键盘后面

时间:2015-09-22 09:51:37

标签: android android-edittext android-softkeyboard setfocus

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

此外,当用户专注于第二个EditText时,它仍然会停留在键盘后面。如果用户首先对焦于第一个EditText然后关闭键盘并对焦第二个EditText,则滚动效果很好。

只有三星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) {

        }
    };
}


MyActivity 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中输入一个字符后失去焦点。它突然失去了焦点!

2 个答案:

答案 0 :(得分:0)

尝试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();
        }
    }
};

}

答案 1 :(得分:0)

解决。我已经更改了布局 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>