when touched teclado tapar tapa studio outside ocultar foco edittext desactivar con cambiar android android-softkeyboard

touched - Cómo ocultar el teclado suave de Android en EditText



ocultar teclado android edittext (13)

Tengo una Actividad con algunos campos EditText y algunos botones como una conveniencia para lo que normalmente se usaría para poblar esos campos. Sin embargo, cuando el usuario toca uno de los campos EditText aparece automáticamente el teclado virtual de Android. Quiero que permanezca oculto por defecto, a menos que el usuario presione el botón de menú durante mucho tiempo. Busqué una solución para esto y encontré varias respuestas, pero hasta ahora no puedo hacer que funcionen.

He probado lo siguiente:

1 - En el método onCreate,

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

2 - También en el método onCreate,

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

3 - y fIn el archivo Manifest,

<activity android:name=".activityName" android:windowSoftInputMode="stateAlwaysHidden"/>

Ninguno de estos métodos funciona. Cada vez que el usuario hace clic en el campo EditText, aparece el teclado virtual. Solo quiero que aparezca el teclado virtual si el usuario lo muestra de forma explícita presionando prolongadamente la tecla de menú.

¿Por qué no está funcionando?


A veces uso un truco para hacer exactamente eso. Puse un soporte de foco invisible en algún lugar en la parte superior del diseño. Sería por ejemplo así

<EditText android:id="@id/editInvisibleFocusHolder" style="@style/InvisibleFocusHolder"/>

con este estilo

<style name="InvisibleFocusHolder"> <item name="android:layout_width">0dp</item> <item name="android:layout_height">0dp</item> <item name="android:focusable">true</item> <item name="android:focusableInTouchMode">true</item> <item name="android:inputType">none</item> </style>

y luego en "Resumir" llamaría

editInvisibleFocusHolder.setInputType(InputType.TYPE_NULL); editInvisibleFocusHolder.requestFocus();

Eso funciona bien para mí desde 1.6 hasta 4.x


Después de mucho tiempo buscando en la clase TextView, encontré una forma de evitar que aparezca el teclado. El truco es esconderlo justo después de que aparezca, por lo que busqué un método que se llama después de que aparezca el teclado y lo oculté.

Implementé la clase EditText

public class NoImeEditText extends EditText { public NoImeEditText(Context context, AttributeSet attrs) { super(context, attrs); } /** * This method is called before keyboard appears when text is selected. * So just hide the keyboard * @return */ @Override public boolean onCheckIsTextEditor() { hideKeyboard(); return super.onCheckIsTextEditor(); } /** * This methdod is called when text selection is changed, so hide keyboard to prevent it to appear * @param selStart * @param selEnd */ @Override protected void onSelectionChanged(int selStart, int selEnd) { super.onSelectionChanged(selStart, selEnd); hideKeyboard(); } private void hideKeyboard(){ InputMethodManager imm = (InputMethodManager) getContext().getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(getWindowToken(), 0); } }

y estilo

<com.my.app.CustomViews.NoImeEditText android:layout_width="match_parent" android:layout_height="wrap_content" android:editable="false" android:background="@null" android:textSize="@dimen/cell_text" />


El resultado de mi prueba:

con: editText.setInputType (InputType.TYPE_NULL);

el teclado desaparecerá, pero el cursor también desaparecerá.

con: editText.setShowSoftInputOnFocus (falso)

Funciona como se esperaba.


El teclado EditorInfo.TYPE_NULL siguió aumentando a pesar de que establecí EditorInfo.TYPE_NULL en la vista. Ninguna de las respuestas funcionó para mí, excepto la idea que obtuve de la respuesta de nik431:

editText.setCursorVisible(false); editText.setFocusableInTouchMode(false); editText.setFocusable(false);


Esto te ayudara

editText.setInputType(InputType.TYPE_NULL);

Editar:

Para mostrar el teclado virtual, debe escribir el siguiente código en el long key press event of menu button

editText.setInputType(InputType.TYPE_CLASS_TEXT); editText.requestFocus(); InputMethodManager mgr = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); mgr.showSoftInput(editText, InputMethodManager.SHOW_FORCED);


Intentemos establecer las siguientes propiedades en su xml para EditText

android:focusableInTouchMode="true" android:cursorVisible="false".

si desea ocultar el teclado de programación en la actividad de inicio, vaya a este link


La siguiente línea es exactamente lo que se está buscando. Este método se ha incluido con API 21 , por lo tanto, funciona para API 21 y superior.

edittext.setShowSoftInputOnFocus(false);


Ocultar el teclado

editText.setInputType(InputType.TYPE_NULL);

Mostrar teclado

etData.setInputType(InputType.TYPE_CLASS_TEXT); etData.setFocusableInTouchMode(true);

en el diseño principal

android:focusable="false"


Parece que hay una gran variedad de formas de evitar que aparezca el teclado del sistema, tanto de forma programática como en xml. Sin embargo, esta es la manera que me ha funcionado a la vez que he soportado dispositivos pre API 11.

// prevent system keyboard from appearing if (android.os.Build.VERSION.SDK_INT >= 11) { editText.setRawInputType(InputType.TYPE_CLASS_TEXT); editText.setTextIsSelectable(true); } else { editText.setRawInputType(InputType.TYPE_NULL); editText.setFocusable(true); }


Simplemente use EditText.setFocusable(false); en actividad

o usar en xml

android:focusable="false"


Tres formas basadas en la misma instrucción simple:

un). Resultados tan fáciles como localizar (1):

android:focusableInTouchMode="true"

entre la configuración de cualquier elemento precedente en el diseño, ejemplo:

si todo tu diseño está compuesto de:

<ImageView> <EditTextView> <EditTextView> <EditTextView>

a continuación, puede escribir el (1) entre los parámetros de ImageView y esto atraerá la atención de Android a ImageView en lugar de EditText.

segundo). En caso de que tenga otro elemento precedente que un ImageView, puede que necesite agregar (2) a (1) como:

android:focusable="true"

do). también puedes simplemente crear un elemento vacío en la parte superior de tus elementos de vista:

<LinearLayout android:focusable="true" android:focusableInTouchMode="true" android:layout_width="0px" android:layout_height="0px" />

Esta alternativa hasta este punto resulta ser la más simple de todas que he visto. Espero eso ayude...


necesitas agregar en manifiesto Su archivo de manifiesto se vería así:

<activity ... android:windowSoftInputMode="stateHidden|adjustResize" ... >


weekText = (EditText) layout.findViewById(R.id.weekEditText); weekText.setInputType(InputType.TYPE_NULL);