第一次输入后,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>
有两个 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>