traba teclado tarda tactil samsung porque para letras grandes grande funciona escribir descargar dedos como celular cambiar arreglar android actionlistener android-softkeyboard android-input-method

tarda - teclado android para dedos grandes



Ocultar teclado suave al presionar la tecla de retorno (8)

He buscado media docena de otras respuestas en SO, pero no he encontrado una que funcione. Todo lo que estoy tratando de hacer es cerrar el teclado virtual cuando el usuario presiona el botón Intro. (El equivalente a la increíblemente sencilla llamada ''resignKeyboard'' de iOS). En el siguiente código, no se llama al método onEditorAction. He configurado una vista EditText en mi archivo XML y el código en mi fragmento es el siguiente:

@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { fragView = inflater.inflate(R.layout.fragment_encrypt2, container, false); textField = (EditText) fragView.findViewById(R.id.textField); textField.setOnEditorActionListener(new TextView.OnEditorActionListener() { @Override public boolean onEditorAction(TextView arg0, int actionId, KeyEvent arg2) { // hide the keyboard and search the web when the enter key // button is pressed if (actionId == EditorInfo.IME_ACTION_GO || actionId == EditorInfo.IME_ACTION_DONE || actionId == EditorInfo.IME_ACTION_NEXT || actionId == EditorInfo.IME_ACTION_SEND || actionId == EditorInfo.IME_ACTION_SEARCH || (arg2.getAction() == KeyEvent.KEYCODE_ENTER)) { InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(textField.getWindowToken(), 0); return true; } return false; } }); // Inflate the layout for this fragment return fragView;//inflater.inflate(R.layout.fragment_encrypt2, container, false); }

El siguiente es un fragmento del archivo XML donde defino el campo EditText. Necesito que EditText sea multilínea.

<EditText android:id="@+id/textField" android:layout_width="match_parent" android:layout_height="match_parent" android:hint="@string/Encrypted_Text_Hint" android:gravity="top" android:inputType="textMultiLine" android:imeOptions="actionDone"/>


A continuación el código funciona para mí.

EN XML:

android:imeOptions="actionDone" android:inputType="textCapWords"

EN LA CLASE DE JAVA:

edit_text.setOnEditorActionListener(new OnEditorActionListener() { @Override public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { // TODO Auto-generated method stub if ((actionId==EditorInfo.IME_ACTION_DONE ) ) { //Toast.makeText(getActivity(), "call",45).show(); // hide virtual keyboard InputMethodManager imm = (InputMethodManager)getActivity().getSystemService(Context.INPUT_METHOD_SERVICE); //or try following: //InputMethodManager imm = (InputMethodManager)getBaseContext().getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(auto_data.getWindowToken(), 0); return true; } return false; } });


EditText.xml

<EditText android:id="@+id/edit_text_searh_home" android:layout_width="match_parent" android:layout_height="wrap_content" android:padding="4dp" android:singleLine="true" android:lines="1" android:hint="Ingresa palabras claves" android:imeActionLabel="Search" android:background="@drawable/rounded_edit_text_search" android:drawableRight="@android:drawable/ic_menu_search"/>

Fragmento.java

final EditText edit_text_searh = (EditText) v.findViewById(R.id.edit_text_searh_home); edit_text_searh.setOnEditorActionListener(new TextView.OnEditorActionListener() { @Override public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(edit_text_searh.getWindowToken(), 0); Toast.makeText(getContext(),edit_text_searh.getText(),Toast.LENGTH_SHORT).show(); return true; } });


Esto puede ser que podría agregar un atributo a su EditText como este:

android:imeOptions="actionSearch"


La respuesta aceptada está en desuso:

<EditText android:id="@+id/edittext_done" android:layout_width="fill_parent" android:layout_height="wrap_content" android:imeOptions="actionDone" android:singleLine="true" />

Intenta con esto:

<EditText android:id="@+id/edittext_done" android:layout_width="fill_parent" android:layout_height="wrap_content" android:imeOptions="actionDone" android:maxLines="1" />


Pruebe este método, puede ser resolver su problema.

protected void showKeyboard() { InputMethodManager inputMethodManager = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE); if (activity.getCurrentFocus() == null) { inputMethodManager.toggleSoftInput(InputMethodManager.SHOW_FORCED,0); } else { View view = activity.getCurrentFocus(); inputMethodManager.showSoftInput(view,InputMethodManager.SHOW_FORCED); } } /** * Hide keyboard. */ protected void hideKeyboard() { InputMethodManager inputMethodManager = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE); View view = activity.getCurrentFocus(); if (view == null) { if (inputMethodManager.isAcceptingText()) inputMethodManager.toggleSoftInput(InputMethodManager.HIDE_NOT_ALWAYS, 0); } else { if (view instanceof EditText) ((EditText) view).setText(((EditText) view).getText().toString()); // reset edit text bug on some keyboards bug inputMethodManager.hideSoftInputFromInputMethod(view.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS); } }


Resolví el problema cambiando lo siguiente en el archivo XML de:

android:inputType="textMultiLine"

a:

android:inputType="textImeMultiLine"


Según mis pruebas, lo que realmente se necesita para descartar el teclado virtual, cuando un usuario hace clic en el botón de entrada, se puede lograr simplemente agregando el código a continuación a su Texto de edición en xml.

android:imeOptions="actionDone" android:inputType="textImeMultiLine"

No es necesario utilizar OnEditorActionListener ni ningún otro código Java.


Si no desea varias líneas, para su texto de edición solo puede especificar una sola línea para el texto de edición y también puede poner las opciones como Hecho así.

<EditText android:id="@+id/edittext_done" android:layout_width="fill_parent" android:layout_height="wrap_content" android:imeOptions="actionDone" android:singleLine="true" />

Claramente no sé si estás tratando de lograr esto o no. De cualquier manera, echa un vistazo.

EDIT: android: singleLine está en desuso desde la API 3 debido a un mal rendimiento, tiene que usar android: maxLines en su lugar. singleLine estará disponible porque incluso ahora algunos efectos no son compatibles con el atributo android: maxLines.