studio programación programacion herramientas gratis fundamentos curso con avanzado aplicaciones android focus android-edittext

programación - manual android studio avanzado



¿Cómo puedo establecer el foco(y mostrar el teclado) en mi EditText mediante programación? (8)

Tengo un diseño que contiene algunas vistas como esta:

<LinearLayout> <TextView...> <TextView...> <ImageView ...> <EditText...> <Button...> </linearLayout>

¿Cómo puedo establecer el foco (mostrar el teclado) en mi EditText programación?

Lo he intentado y funciona solo cuando inicio normalmente mi Activity , pero cuando lo inicio en un TabHost , no funciona.

txtSearch.setFocusableInTouchMode(true); txtSearch.setFocusable(true); txtSearch.requestFocus();


Aquí está KeyboardHelper Class para ocultar y mostrar el teclado

import android.content.Context; import android.view.View; import android.view.inputmethod.InputMethodManager; import android.widget.EditText; /** * Created by khanhamza on 06-Mar-17. */ public class KeyboardHelper { public static void hideSoftKeyboard(Context context, View view) { if (context == null) { return; } InputMethodManager imm = (InputMethodManager) context .getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(view.getWindowToken(), 0); } public static void hideSoftKeyboard(Context context, EditText editText) { InputMethodManager imm = (InputMethodManager) context .getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(editText.getWindowToken(), 0); } public static void openSoftKeyboard(Context context, EditText editText) { InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE); imm.showSoftInput(editText, InputMethodManager.SHOW_IMPLICIT); } }


Aquí se muestra cómo se puede hacer una extensión de kotlin para mostrar y ocultar el teclado virtual:

fun View.showKeyboard() { this.requestFocus() val inputMethodManager = context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager inputMethodManager.showSoftInput(this, InputMethodManager.SHOW_IMPLICIT) } fun View.hideKeyboard() { val inputMethodManager = context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager inputMethodManager.hideSoftInputFromWindow(windowToken, 0) }

Entonces puedes hacer esto:

editText.showKeyboard() // OR editText.hideKeyboard()


Esto funcionó para mí, gracias a ungalcrys

Mostrar teclado:

editText = (EditText)findViewById(R.id.myTextViewId); editText.requestFocus(); InputMethodManager imm = (InputMethodManager)getSystemService(this.INPUT_METHOD_SERVICE); imm.toggleSoftInput(InputMethodManager.SHOW_FORCED,InputMethodManager.HIDE_IMPLICIT_ONLY);

Ocultar teclado:

InputMethodManager imm = (InputMethodManager) getSystemService(this.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(editText.getWindowToken(), 0);


No pude obtener ninguna de estas respuestas para trabajar por su cuenta. La solución para mí fue combinarlos:

InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_IMPLICIT_ONLY); editText.requestFocus(); imm.showSoftInput(editText, InputMethodManager.SHOW_FORCED);

No estoy seguro de por qué fue necesario para mí, según los documentos parece que cualquiera de los métodos debería haber funcionado por sí mismos.



utilizar:

editText.requestFocus(); InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_IMPLICIT_ONLY);


showSoftInput no funcionaba para mí en absoluto.

Pensé que necesitaba establecer el modo de entrada: android:windowSoftInputMode="stateVisible" (aquí en el componente Activity en el manifiesto)

¡Espero que esto ayude!


final EditText tb = new EditText(this); tb.requestFocus(); tb.postDelayed(new Runnable() { @Override public void run() { InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); inputMethodManager.showSoftInput(tb, InputMethodManager.SHOW_IMPLICIT); } }, 1000);