teclado samsung programáticamente ocultar mostrar developer desactivado como bloquear abrir android navigation-drawer

android - samsung - teclado de navegación ocultar teclado cuando onDrawerOpened



ocultar teclado virtual programáticamente (5)

Tengo un fragmento con edittext en él. Cuando hago clic en el texto de edición, aparece el teclado. el problema es que cuando abro el cajón, el cajón no oculta el teclado. El teclado todavía se muestra incluso aunque cambie a otro fragmento. ¿Cómo puedo ocultar el teclado cuando abro el cajón?

trato de poner

InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(getWindowToken(), 0);

y

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);

Ambos no ocultan el teclado.


Creo mi propia clase de ayudante para mostrar u ocultar el teclado.

Aquí está...

public static class Helper { public static void showKeyboard(Activity activity) { InputMethodManager imm = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE); if (imm != null) { imm.showSoftInput(activity.getCurrentFocus(), InputMethodManager.SHOW_IMPLICIT); } } public static void hideKeyboard(Activity activity) { InputMethodManager imm = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE); if (imm != null && activity.getCurrentFocus() != null) { imm.hideSoftInputFromWindow(activity.getCurrentFocus().getWindowToken(), 0); } } }

Llame a Helper.showKeyboard(this) para mostrar el teclado. Llame a Helper.hideKeyboard(this) para ocultar el teclado. this refiere a la actividad.


La escucha del conjunto de cajones ya está en desuso; puede detectar el cambio de estado del cajón de navegación utilizando mDrawerLayout.addDrawerListener () y cerrar el teclado enDrawerStateChange

mDrawerLayout.addDrawerListener(new DrawerLayout.DrawerListener() { @Override public void onDrawerSlide(View drawerView, float slideOffset) { //Called when a drawer''s position changes. } @Override public void onDrawerOpened(View drawerView) { //Called when a drawer has settled in a completely open state. //The drawer is interactive at this point. // If you have 2 drawers (left and right) you can distinguish // them by using id of the drawerView. int id = drawerView.getId(); // id will be your layout''s id: for example R.id.left_drawer } @Override public void onDrawerClosed(View drawerView) { // Called when a drawer has settled in a completely closed state. } @Override public void onDrawerStateChanged(int newState) { // Called when the drawer motion state changes. The new state will be one of STATE_IDLE, STATE_DRAGGING or STATE_SETTLING. InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); inputMethodManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0); } });


Prueba esto...

@Override protected void onCreate(Bundle savedInstanceState) { ...... //Initialize drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); //Setting the actionbarToggle to drawer layout drawerLayout.setDrawerListener(actionBarDrawerToggle); //calling sync state is necessay or else your hamburger icon wont show up actionBarDrawerToggle.syncState(); }

DrawerListerner :

ActionBarDrawerToggle actionBarDrawerToggle = new ActionBarDrawerToggle(this, drawerLayout, toolbar, R.string.app_name, R.string.app_name) { @Override public void onDrawerClosed(View drawerView) { // Code here will be triggered once the drawer closes as we dont want anything to happen so we leave this blank super.onDrawerClosed(drawerView); InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); inputMethodManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0); } @Override public void onDrawerOpened(View drawerView) { // Code here will be triggered once the drawer open as we dont want anything to happen so we leave this blank super.onDrawerOpened(drawerView); InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); inputMethodManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0); } };

Feliz codificación ...


Utilice esta línea de código antes de abrir / cerrar el cajón deslizante

InputMethodManager inputMethodManager = (InputMethodManager) this.getSystemService(Activity.INPUT_METHOD_SERVICE); inputMethodManager.hideSoftInputFromWindow(this.getCurrentFocus().getWindowToken(), 0);


el problema es que se debe llamar a getWindowToken() desde la Vista que actualmente está "sosteniendo" el teclado. Es muy molesto, estoy de acuerdo contigo, pero así es como funciona.

Por ejemplo, digamos que EditText mEditText es el objeto actualmente enfocado que recibe las pulsaciones del teclado. Entonces tu código sería:

InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(mEditText.getWindowToken(), 0);

Espero eso ayude.