android - para - teclado virtual pc
¿Deshabilitando la vista de edición de pantalla completa para entrada de teclado suave en horizontal? (11)
En los dispositivos Android que usan teclados programables, quiero evitar que aparezca la vista de edición del teclado de pantalla completa (que se muestra a continuación) cuando está en modo horizontal (es decir, quiero ver solo el teclado virtual y la vista que tengo detrás).
Supongo que esto se puede lograr utilizando el setExtractViewShown(false)
en InputMethodService
, pero no puedo acceder a la instancia predeterminada de esto y no quiero implementar un método de entrada personalizado.
Editado para agregar: la vista a la que va la entrada no es un TextView
(es una View
con una implementación de InputConnection
personalizada), por lo que android:imeOptions="flagNoExtractUi"
no funcionará aquí.
Además, si desea combinar varias imeOptions mediante programación, puede utilizar el | sintaxis.
Por ejemplo, para deshabilitar la vista de edición de pantalla completa en horizontal y reemplazar la tecla "Siguiente" por "OK" (ACTION_DONE) en el teclado, puede usar:
editText.setImeOptions(EditorInfo.IME_ACTION_DONE | EditorInfo.IME_FLAG_NO_EXTRACT_UI);
La respuesta anterior me ayudó a encontrar la solución para EditTexts agregados dinámicamente:
editText.setImeOptions(EditorInfo.IME_FLAG_NO_EXTRACT_UI);
Mi solución:
android:imeOptions="flagNoExtractUi|flagNoFullscreen"
Para hacerlo, simplemente navegue a la actividad xml y pegue android:imeOptions="flagNoExtractUi"
en su código. Hmm bastante simple, pero ¿dónde se debe pegar el hacha? Echa un vistazo al código de ejemplo de actividad xml y mira EditText:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
>
<EditText
android:imeOptions="flagNoExtractUi"
android:id="@+id/etTextInAct"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10" >
<requestFocus />
</EditText>
</LinearLayout>
Si desea más opciones de personalización para el teclado, consulte http://developer.android.com/guide/topics/ui/controls/text.html
Puede llamar para ocultar el teclado suave y borrar el enfoque de la vista de búsqueda.
public void hideKeyboard(View view) {
InputMethodManager imm = (InputMethodManager) view.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
}
super.clearFocus();
Puedes usar :
android:imeOptions="flagNoFullscreen"
en tu edittext
Sé que es un poco tarde, pero para cualquier persona que aún esté interesada, aquí está mi solución: En mi caso, tenía una actividad horizontal con un texto de edición en la parte superior y necesitaba implementar la función de autocompletar en esta actividad de búsqueda, la cual se superpone. El teclado causó un problema que el usuario no pudo ver el resultado de RecyclerView . Así que terminé teniendo este EditText en mi diseño:
<EditText
android:layout_width="match_parent"
android:layout_height="?actionBarSize"
android:id="@+id/main_search_et"
android:imeOptions="actionSearch|flagNoExtractUi"
android:inputType="text" />
¡Aclamaciones!
Si está modificando el IME directamente, puede evitar que se muestre una ExtractedView anulando onUpdateExtractingVisibility
:
@Override
public void onUpdateExtractingVisibility(EditorInfo ei) {
ei.imeOptions |= EditorInfo.IME_FLAG_NO_EXTRACT_UI;
super.onUpdateExtractingVisibility(ei);
}
Use android:imeOptions="flagNoFullscreen"
para lograr esa función.
agregue la propiedad android:imeOptions="flagNoExtractUi"
a cada EditText
en su archivo XML
.
Finalmente respondí mi propia pregunta:
La IU de extracción (es decir, el modo de edición de pantalla completa) se puede desactivar en el punto en el que se conecta la conexión de entrada:
@Override
public InputConnection onCreateInputConnection(EditorInfo outAttrs) {
outAttrs.imeOptions = EditorInfo.IME_FLAG_NO_EXTRACT_UI;
// etc.
}