Deshabilitar la vista de edición de pantalla completa para la entrada de teclado en horizontal?
En dispositivos Android que usan teclados suaves, quiero evitar que la vista de edición de teclado de pantalla completa (que se muestra a continuación) aparezca cuando esté en modo horizontal (es decir, quiero ver solo el teclado suave y mi vista detrás de él).
Asumo que esto se puede lograr usando el método setExtractViewShown(false)
en InputMethodService
, pero no puedo acceder a la instancia predeterminada de esto y no quiero implementar un método de entrada personalizado.
Edited to add: la vista a la que la entrada es ir no es un TextView
(es un View
con una implementación personalizada InputConnection
), por lo que android:imeOptions="flagNoExtractUi"
no funcionará aquÃ.
11 answers
Finalmente respondà a mi propia pregunta:
La interfaz de usuario 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.
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-01-18 16:47:21
Para hacer eso, simplemente vaya a activity xml y pegue android:imeOptions="flagNoExtractUi"
en su código. Hmm bastante simple-pero donde el hac debe ser pegado? 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
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-11-02 06:20:03
Agregue la propiedad android:imeOptions="flagNoExtractUi"
a cada EditText
en su archivo XML
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-11-13 02:19:10
La respuesta anterior me ayudó a encontrar la solución para editar textos añadidos dinámicamente:
editText.setImeOptions(EditorInfo.IME_FLAG_NO_EXTRACT_UI);
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-07-02 11:59:26
Use android:imeOptions="flagNoFullscreen"
para lograr esa caracterÃstica.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-04-25 17:28:24
También, si desea combinar varias imeopciones programáticamente, puede usar la sintaxis|.
Por ejemplo, para deshabilitar la vista de edición de pantalla completa en horizontal y reemplazar la tecla "Next" por " OK " (ACTION_DONE) en el teclado, puede usar:
editText.setImeOptions(EditorInfo.IME_ACTION_DONE | EditorInfo.IME_FLAG_NO_EXTRACT_UI);
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-03-08 09:15:49
Si está modificando el IME directamente, puede evitar que muestre un ExtractedView invalidando onUpdateExtractingVisibility
:
@Override
public void onUpdateExtractingVisibility(EditorInfo ei) {
ei.imeOptions |= EditorInfo.IME_FLAG_NO_EXTRACT_UI;
super.onUpdateExtractingVisibility(ei);
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-06-14 02:34:23
Sé que es un poco tarde, pero para cualquiera que todavÃa esté interesado, aquà está mi solución : En mi caso, tenÃa una actividad horizontal que contenÃa un EditText en la parte superior y necesitaba implementar la función de autocompletar en esta búsqueda Actividad, que el teclado superpuesto causó un problema que el usuario no podÃa ver como 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" />
Salud!
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-12-16 15:16:59
Puedes usar:
android:imeOptions="flagNoFullscreen"
En su edittext
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-09-27 02:54:48
Mi solución:
android:imeOptions="flagNoExtractUi|flagNoFullscreen"
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-09-18 01:58:28
Puede llamar para ocultar el teclado de software y despejar el foco de searchview.
public void hideKeyboard(View view) {
InputMethodManager imm = (InputMethodManager) view.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
}
super.clearFocus();
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-07-10 15:35:58