android - sacar - desactivar teclado en pantalla windows 10
cómo mantener el cajón deslizante fuera de la parte superior del teclado virtual (1)
Esta es mi solución. En la Actividad que contiene EditText, tengo una subclase que extiende EditText
. En esta subclase, onMeasure()
método onMeasure()
que comprueba si el teclado está abierto.
public static class MyEditText extends EditText {
MyActivity context;
public void setContext(MyActivity context) {
this.context = context;
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int height = MeasureSpec.getSize(heightMeasureSpec);
Activity activity = (Activity)getContext();
Rect rect = new Rect();
activity.getWindow().getDecorView().getWindowVisibleDisplayFrame(rect);
int statusBarHeight = rect.top;
int screenHeight = activity.getWindowManager().getDefaultDisplay().getHeight();
int diff = (screenHeight - statusBarHeight) - height;
// assume all soft keyboards are at least 128 pixels high
if (diff>128)
context.showHandle(false);
else
context.showHandle(true);
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
}
Luego, en la actividad, si el teclado está abierto, el asa del cajón está configurada en una imagen transparente de 1px x 1px; si el teclado está oculto, se muestra el asa real:
private void showHandle(boolean show) {
ImageView drawer_handle = (ImageView) findViewById(R.drawable.handle);
if (show)
drawer_handle.setImageResource(R.drawable.handle);
else
drawer_handle.setImageResource(R.drawable.handle_blank);
}
Finalmente, asegúrese de llamar a setContext()
en onCreate()
de MyActivity
MyEditText met = (MyEditText) findViewById(R.id.edit_text);
met.setContext(this);
Me he estado rascando la cabeza todo el día por esto. en una de mis actividades (y solo una) cuando abro el teclado virtual, aparece el asa del cajón deslizante encima. Logré solucionar este problema en todas las demás actividades de mi aplicación colocando android: windowSoftInputMode = "adjustPan" en cada actividad en mi archivo Manafest.xml, incluida la actividad en cuestión. también, en la medida en que he podido determinar que ninguno de los objetos de la actividad tiene foco (si es que uno no puedo encontrar la manera de encontrarlo). Comprobé el foco utilizando this.getCurrentFocus () y luego haciendo view.clearFocus () en la vista devuelta si había uno. hasta el momento no ha devuelto una vista, por lo que puedo decir, nada tiene foco.
¿algunas ideas?