Niedawno rozwiązałem ten problem na telefonie Nexus 7. Takie zachowanie nie wystąpiło w innych urządzeniach testowych. Wydaje się, że sztuczka polega na zmianie fokusa, ZANIM zamkniesz klawiaturę programową. Klawiatura jest zamknięta w 3 punktach - kliknięcie przycisku Gotowe, kliknięcie poza edytorem edycyjnym i kliknięcie przycisku Wstecz.
Najpierw utwórz ukrytego elementu jeść skupienie
<MyEditText
android:id="@+id/editHidden"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_below="@id/imageLogin"
/>
ja przechowywane tego, ale to trochę brzydki ...
@Override
protected void onResume() {
super.onResume();
Utils.focusable = findViewById(R.id.editHidden);
Teraz zmieniać ostrość do ukrytego elementu, gdy klawiatura zamknięte.
public static void clearFocus() {
try {
if (focusable!=null)
focusable.requestFocus();
} catch (Exception e) {}
}
public static void hideSoftKeyboard(View view) {
clearFocus();
if (view!=null) {
try {
InputMethodManager inputMethodManager = (InputMethodManager) view.getContext().getSystemService(Activity.INPUT_METHOD_SERVICE);
inputMethodManager.hideSoftInputFromWindow(view.getWindowToken(), 0);
} catch (Exception e) {}
}
}
Następnie uruchom funkcję hideKeyboard w miejscach klawiatura jest zamknięty: EditText powrotem przycisk wciśnięty:
@Override
public boolean onKeyPreIme(int keyCode, KeyEvent event)
{
if(keyCode == KeyEvent.KEYCODE_BACK)
{
try {
Utils.clearFocus();
} catch (Exception e) {}
}
return super.onKeyPreIme(keyCode, event);
}
Done przycisk wciśnięty, należy dołączyć to do wszelkich polach EditText problem występuje z:
public static OnEditorActionListener getOnEditorActionListener() {
return new OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if(actionId==EditorInfo.IME_ACTION_DONE){
hideSoftKeyboard(v);
}
return false;
}
};
}
Kliknij poza polem tekstowym - dołącz do wszystkich elementów na stronie onCreate();
public static void setupUI (Widok) {
try {
//Set up touch listener for non-text box views to hide keyboard.
if(!(view instanceof EditText)) {
view.setOnTouchListener(new OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
hideSoftKeyboard(v);
return false;
}
});
}
//If a layout container, iterate over children and seed recursion.
if (view instanceof ViewGroup) {
for (int i = 0; i < ((ViewGroup) view).getChildCount(); i++) {
View innerView = ((ViewGroup) view).getChildAt(i);
setupUI(innerView);
}
}
} catch (Exception e) {}
}
To dość brudny, ale nie rozwiąże problemu, mam nadzieję, że istnieje lepszy sposób chociaż.
Co się stanie, jeśli trzymasz go wewnątrz scrollView? Więc to też się dzieje? –
Umieściłem mój RelativeLayout wewnątrz ScrollView: to niczego nie zmienia, przepraszam –
Czy cały "EditText" jest ukryty, czy tylko tam, gdzie zaczynają się znaki? – codeMagic